Hvad er et script til 1s. "Arranger et opkald!" giver dig mulighed for at opbygge en lukket cyklus af interaktioner med klienten

I denne artikel vil jeg forsøge at give et par tips om opsætning af scriptaktivering på websteder, der bruger 1C.

Hvorfor kan dette være nødvendigt? I mit eksempel var jeg nødt til at køre php-scriptet for at aktivere download på webstedet, hvis cms er 1C-Bitrix. De der. filen udlæses fra 1C og signalerer siden om at hente filen. Således opnås en høj effektivitet af udveksling med webstedet.

Faktisk er der ikke noget svært i denne proces, men på grund af detaljerne i denne procedure kan programmøren have nogle problemer med denne handling.

Opgavebeskrivelse:

Det var nødvendigt efter upload af datafilen fra 1C at uploade filen til webstedets database så hurtigt som muligt. For at gøre dette oprettede programmøren, der udvikler webstedet, et script, der udførte to handlinger - det kontrollerede godkendelsen og aktiverede udvekslingen fra webstedet. Selve php-scriptet så sådan ud: "http:// /1c_priser_import_run.php".

Lad os se, hvordan dette script blev lanceret.

FÅ anmodning fra 1C

Først oprettes et objekt HTTP-forbindelse", ved hjælp af hvilken vi udfører autorisation:

Få 267 1C-videolektioner gratis:

HTTP = Ny HTTP-forbindelse(" /1c_prices_import_run.php

I parametrene passerer jeg php script adresse, adgangskode og login. Dette er nok, hvis du ikke har andre vanskelige forhold som sikker autorisation og en proxyserver.

Mit andet trin var at kontrollere forbindelsen, i tilfælde af vellykket godkendelse returnerede dette script ordet "succes" til mig:

HTTP.Get(" http:// /1c_prices_import_run.php?mode=checkauth", ResponseFileName); // autorisationskontrol

I parametrene for Get-metoden (svarende til GET) angiver vi parameteren " ?mode=checkauth", hvilket viser, at det kun er et ping. Den anden parameter, "ResponseFileName", er den fil, som serverens svar vil blive skrevet til.

HTTP.Get(" http:// /1c_prices_import_run.php?mode=forespørgsel", RequestFileName);

Det er alt. Alt er ret simpelt og fungerer perfekt på 1C-siden.

Nå, til sidst vil jeg vise hele koden i sin helhed:

RequestFileName= GetTempFileName();

HTTP = Ny HTTP-forbindelse(" http:// /1c_prices_import_run.php«,SettingDataExchange.HTTPExchangeUserName,SettingDataExchange.HTTPExchangePassword,); //forbindelse

Undtagelse

Slut på Forsøg;

HTTP.Get( http:// /1c_prices_import_run.php?mode=checkauth", RequestFileName); // autorisationskontrol

Undtagelse

Slut på Forsøg;

ResponseFile = New File(ResponseFileName);

Hvis ResponseFile.Exists() Så

Tesen om, at open source er skabt af entusiastiske nørder, har mistet sin relevans i vores tid. Ikke desto mindre blev ideologien om open source født lige sådan. Seje programmer skrevet om natten af ​​skæggede (og ikke så) særlinge, uinteresseret, bare for at gøre verden til et bedre sted - ændrede verden af ​​softwareudvikling.

Enhver programmør drømmer i al hemmelighed om at gøre noget stort og lyst, som alle kan lide. Hvis du fortæller mig, at du ikke er en af ​​de mennesker, at du kun kan lide at lukke billetter i en fungerende fejltracker, og du ikke drømmer om at udgive dit projekt til den store verden, så vil jeg ikke tro dig. Eller jeg vil foreslå et karriereskift. Jeg er overbevist om, at en programmør er en kunstner, og det er vigtigt for en kunstner at gøre noget for sig selv, måske bare "på bordet" - men at gøre det.

En dag dukkede en idé til et projekt op i mit hoved. Idéen var ren research, og jeg havde ikke tænkt mig at lave en form for "produkt" ud af det. Derudover havde jeg aldrig kørt open source-projekter før, og jeg ville virkelig gerne prøve, hvordan det hele fungerer. Hvad kom der ud af det - under snittet.

Allerede i begyndelsen af ​​projektets livsvej skrev jeg allerede om det på Habré. Så var det de første trin, koden var rå, men det virkede. Jeg ønskede, at projektet skulle vække interesse hos andre forfattere, da jeg åbenbart ikke ville have trukket det alene og i det hele taget opgivet det. Det ville i princippet være sket, hvis jeg ikke havde modtaget min første pull-anmodning fra en fremmed. Men først ting først...

Hvad drejer det sig om?

Jeg lavede min egen implementering af en stackmaskine, der udfører scripts i 1C: Enterprise-sproget. Eller, for at sige det mere enkelt, en åben fortolker af 1C-sproget og en åben implementering af nogle standard 1C-klasser. Samtidig blev der sat et klart anvendt mål for projektet - at give 1C-kælenavne et scripting automatiseringsværktøj, der ville være nemt at lære. Projektet fik navnet 1Script.

Og så er projektet offentliggjort på Habré og på den specialiserede 1C-portal infostart.ru. Jeg venter på feedback. Jeg modtog det første svar på mistet og grinede hjerteligt. Emnet på forummet hed “Tolk 1C på Habré. Lad os holde kæft?" Der er mange gode mennesker på tågen, jeg var glad :)

Så kom der mere eller mindre fyldestgørende spørgsmål, som jeg flittigt svarede på, hvorefter artiklerne i almindelig tilstand gik ned fra de første sider et sted og ned, og interessen for projektet aftog. Nå, det var den forventede slutning, jeg var lidt irriteret, men ikke meget. Faktisk regnede jeg ikke med noget særligt resultat. Chattede og okay. Der gik dage, jeg blev færdig med noget, postede endda en anden version, men ingen undtagen mig havde brug for det. Min ild er tørret ud. Selvom jeg ikke blev skuffet, holdt jeg op med at skrive ny kode.

Anden vind

Cirka to måneder efter udgivelsen blev jeg kontaktet af Sergey Batanov (Serega, hej! :) - en fremtrædende fyr i 1C-samfundet, som tilbød sin hjælp til at udvikle standardbiblioteket. Det var 1C-ovsky-klassen "Table of Values". Selvfølgelig var jeg enig. Og da jeg så den rigtige kode, som Sergey sendte, var jeg virkelig glad som et barn. Det sker ofte på internettet, når nogen tilbyder noget i ord, men ofte kommer det ikke til sagen. Og her er den rigtige live-kode, der virker, som er fuldstændig tilstrækkelig, som kan indsættes i projektet!

Samtidig er opgaven ret stor, jeg ville være for doven til at klare det selv. Og her - et håndgribeligt, virkelig nyttigt, målbart med kodelinjers bidrag til det overordnede projekt! Kort sagt, jeg vil ikke være uærlig, hvis jeg siger, at det var Sergey, der gjorde, så projektet ikke blev opgivet af mig. Det er en fantastisk inspiration at få hjælp fra en fremmed. Bare sådan, fordi han var interesseret i det, du startede.

Efterhånden begyndte jeg at modtage feedback fra folk, der prøvede motoren og spurgte "hvor er denne funktion?", "Men hvordan gør man dette?" Jeg var nødt til at svare på alle disse spørgsmål og sige, at dette er en prototype, og selv tilføje disse funktioner som et presserende spørgsmål. Men entusiasmen gik ud af skalaen: "Folk er interesserede og prøver at ansøge," så nye funktioner blev tilføjet ret hurtigt. I starten havde standardbiblioteket ikke engang funktioner til at arbejde med filer.

Desuden

Efter nogen tid skrev Alexander Kuntashov til mig med et spørgsmål om integrationen af ​​1Script og Snegopat-projektet (www.snegopat.ru). Hvem ved det ikke - dette er sådan en skærper til 1C. Det giver dig mulighed for at lave script-plugins til 1C Configurator, og der er et helt fællesskab af forfattere af sådanne plugins.
Disse plugins blev skrevet i JavaScript og krævede derfor kvalifikationer, der gik ud over standard 1C programmøren. På grund af dette blev udviklingen af ​​plugin-økosystemet i sidste ende også bremset. Antallet af mennesker, der ønsker at forbedre konfiguratoren, er omtrent lig med det samlede antal 1C kaldenavne, men behovet for at lære JavaScript skræmmer forfatterne af potentielle mesterværker væk.

Igen var jeg vildt henrykt over efterspørgslen efter mit idebarn, tryglede forfatteren om distributionssættet til Snegopat og rystede støvet af mit kendskab til C++. Der var meget mere støv end viden, men den kreative kløe gjorde sit arbejde, og jeg kastede mig ud i MSDN.

Cirka en måned senere, i 1C Configurator, blev det muligt at skrive plugins direkte i 1C-sproget uden at skifte til JavaScript-editorvinduet. Samtidig blev de første kritiske fejl i motoren rettet, og den interne arkitektur blev væsentligt revideret.
Jeg fik en berusende glæde af at kommunikere med C++, COM, ATL og alle disse ting, efter mange års udelukkende at arbejde med 1C. Nå, og også fra det faktum, at han gjorde noget nyttigt, håndgribeligt for 1C-nick-samfundet.

Den første oplevelse af kampbrug

Omkring samme tid (jeg husker ikke præcist) blev projektet opmærksom på Alexei Lustin () (Lech, hej til dig også!) - blandt 1C-kælenavnene på en velkendt og respekteret person. Dette faldt sammen med min søgen efter et nyt job. Jeg ledte efter interessante virksomheder på markedet, og Alexey ledte efter specialister til Continuos Integration / Continuos Delivery-projektet for 1C kaldenavne. Så så Lesha allerede mit projekt (og kaldenavn) på Habré, og jeg vidste allerede, at et bestemt hold af avancerede 1C-kælenavne lavede interessante ikke-standardiserede ting på netværket.

På det tidspunkt vidste fællesskabet allerede sådanne ting som enhedstestning, lagring af 1C-kode i git, BDD + agurk for 1C og så videre. Alexei forekom mig at være den mest tilgængelige af disse fyre, og jeg skrev et brev til ham og spurgte, om han havde et interessant job. Så sammen med mit projekt kom jeg ind i et muntert selskab af nørder, som på det tidspunkt var samlet i virksomheden, hvor Alexey arbejdede.

På det tidspunkt havde motoren allerede det minimumssæt af kapaciteter, der kræves til scriptet, og det kunne (som det forekom mig) i princippet bruges som et script til at samle og implementere 1C-databaser.

Hvorfor overhovedet bruge en ny motor til dette?

Faktisk er der en million scriptsprog, det er ikke klart, hvorfor der er brug for et mere, og endda et ukendt - vil læseren af ​​Habr spørge - og han vil ikke have helt ret. Strategisk set var det fremtidige produkt tiltænkt 1C-kælenavne og skulle leve fra udvikler til udvikler, uanset personaleændringer i virksomheden. Der er et objektivt problem i 1C-nick-fællesskabet: der er mange gode specialister blandt dem, men af ​​en eller anden grund ønsker den gennemsnitlige 1C-nick ikke at lære noget andet sprog, efter at han har fået sin hånd i 1C godt. Jeg ved ikke, hvad der er årsagen til dette fænomen, sandsynligvis fordi 1C regler (ironi)? Folk kommer til 1C ved at kende Java, C/C++, mikrocontrollere, Delphi eller ingenting, men de bliver ofte i 1C og er tilbageholdende med at flytte tilbage til deres oprindelige økosystemer.
Jeg forudser nu en bølge af vrede, men lyt venligst til afhandlingen til slutningen. Der er undtagelser fra enhver regel, men når du planlægger et system, der skal overleve flere generationer af udviklere (ikke biologiske, men menneskelige generationer, selvfølgelig), så vil du højst sandsynligt finde en specialist, der kan udvikle det, hvis det er skrevet i 1C . Hvis det er en python (eller indsæt dit yndlingssprog), så bliver du nødt til at hyre en pythonist, der kender 1C meget godt. Og efter hans overgang til store chefer, skal du lede efter en anden af ​​samme, med kompetencer inden for 1C. Og hvis det umiddelbart er et 1C-sprog, så skal du kun finde et 1C-kælenavn, der kender 1C godt, og det er nok.
Systemet vil med andre ord være mere ihærdigt og vil kunne udvikles af flere specialister, hvis det er skrevet på et sprog, som de alle kender.

Således blev omfanget af 1Script klart: Det er DevOps og lignende opgaver med henblik på 1C-projekter.

Første bump og ordentlig udvikling

Det første mere eller mindre store script, som jeg skrev (før det var der tekster på højst hundrede linjer) fik motoren til at gå i stykker. Med en bestemt kombination af parametre og opkaldskæder blev kontrollen overført til et ukendt sted i koden, og applikationen styrtede ned. Jeg måtte næsten fuldstændig omskrive implementeringen af ​​opkaldsstakken og undtagelseshåndteringen. Det var en udfordring i stil med “Åh du er så! Nå, jeg ordner dig!" Kampsikringen gjorde det muligt at omskrive de nødvendige moduler på én dag og desuden at identificere et par fejl. Koden begyndte at køre stabilt. Jeg har udgivet en ny udgivelse. Undervejs, da jeg nu var engageret i Continuous Integration, kom det til den erkendelse, at projektet også havde brug for en build-server og release-automatisering. Derudover sluttede han sig til projektet, kendt blandt 1C-kælenavne som en coryphaeus og guru af 1C-testning. Han lavede mig et værktøjssæt til at teste motoren baseret på hans xUnitFor1C-ramme. Så jeg fik accepttest af adfærd, også skrevet på 1C-sproget. Jeg hentede TeamCity på min hjemmeserver og opsatte natlige builds med testkørsler. Undervejs blev jeg ladet med entusiasme – projektet lever videre og får nye bidragsydere. Det var vildt inspirerende.

I omkring tre eller fire måneder har motorklassebiblioteket endelig fået alt, hvad der er nødvendigt til de fleste scriptopgaver: netværksfunktioner, arbejde med arkiver, XML og så videre er dukket op. Vores CI-projekt for 1C er blevet lanceret med succes.

Omkring samme tid, tak igen, begyndte nye interesserede brugere at komme til projektet. De efterspurgte funktioner, fandt fejl, krævede nye udgivelser.
Strømmen af ​​funktioner, tildelingen af ​​bibliotekskode, kombineret med behovet for et simpelt udgivelsesskema, førte mig til en så interessant ting som vækstproblemet. Men om hende, lidt senere.

I november 2014 blev jeg inviteret til at tale ved den prestigefyldte 1C Infostart Event-konference i St. Petersborg. Selvfølgelig var jeg enig, og jeg tog 1Script som emne for talen. Emnet blev godkendt, hvilket for mig for det første betød, at projektet havde en vis popularitet (dvs. lytterne vil nok komme, fordi de i det mindste hørte noget om det), og for det andet håbede jeg at tiltrække bidragydere, da der var næsten ingen tid til udvikling af motoren.
Specielt til konferencen lavede jeg endda en særlig sjov - CGI-tilstand, hvor scripts kunne køres under kontrol af en HTTP-server og generere HTTP-output. Websteder på 1C-sproget er ikke længere et hosters mareridt, men en barsk virkelighed (bare for sjov).
Talen på Infostart kan betragtes som den første offentlige annoncering, hvor 1Script ikke længere kunne være flov over at blive kaldt et produkt, et værktøj, der er i stand til at løse specifikke problemer. Det var ikke længere et eksperiment, men et kampprodukt. Selvom det stadig er i beta-status.

Vækstproblem eller projektstøtte faldgruber

Det viste sig, at tilstedeværelsen i din afdeling af et efterspurgt projekt, selv et lille, bærer en så betydelig byrde af overheadomkostninger. Til at begynde med er det en featurestream. Ønsker kommer meget oftere end forpligtelser, der gennemfører disse ønsker. Det er påkrævet at tage strengt hensyn til de versioner, hvor visse fejl blev rettet. Det er påkrævet at give brugerne besked om, at en fejl er blevet rettet, siden version X eller en ny funktion dukkede op. Væksten i funktionalitet kræver dokumentation, og dokumentation har en tendens til at blive forældet.
Nå, det sjove er, at den tekniske infrastruktur af den faktiske "support" er påkrævet. Vi havde brug for et websted, en dokumentationsgenerator, en build/deploy server, og så videre og så videre... Finansielle investeringer i infrastrukturen var påkrævet - minimale, men stadig investeringer.
Da jeg startede et forskningsprojekt, forestillede jeg mig ikke engang så mange organisatoriske og tekniske problemer, som jeg skulle stå over for, efterhånden som projektet voksede. Overgangen til git-flow-teknikken hjalp meget i denne henseende, det blev lettere selv at finde ud af det og kommunikere med brugerne om versioner og grene.

Crowdfunding-oplevelse (forfærdeligt ord)

I begyndelsen af ​​dette år forsøgte jeg at udføre et eksperiment - jeg organiserede en indsamling af donationer til infrastruktur - et domænenavn og hosting. Jeg spekulerede på, hvor meget projektet kunne betale for sin egen eksistens. Resultatet var, at folk, der var ukendte for mig, faktisk sendte omkring 100-500 rubler hver. hvilket var nok til at betale for et domænenavn i .io-zonen. Derefter blev kampagnen indskrænket, og strømmen af ​​midler stoppede. Den nåede ikke fuld tilbagebetaling, selvom der blev modtaget en vis økonomisk støtte.
Det vigtigste er, at afhandlingen om effektiviteten af ​​donationsmodellen som sådan blev testet i naturen. Konklusion - i mit tilfælde kan donation næppe kaldes effektiv, selvom den ikke var nul.

Bibliotek med nyttige scripts

På halvandet års kodning i 1Script er der opstået biblioteksblokke, som du selv kan bruge og anbefale til andre. På en naturlig måde akkumulerede jeg en række udviklinger, der var velegnede til genbrug.
Dette førte til, at muligheden for at forbinde tredjeparts "pakker", også skrevet i 1Script, blev tilføjet til motoren. Resultatet blev et andet projekt kaldet oscript-library. (https://github.com/EvilBeaver/oscript-library) Dette bibliotek krævede selvfølgelig også infrastruktur, dokumentation, slutbrugeropdateringer og mere. Men strømmen af ​​bidrag fra 1C-kælenavne er vokset markant. Pakker er jo udviklet i et allerede velkendt sprog, hvilket betyder, at du med det samme kan få gavn af, portere eksisterende udviklinger osv. Fællesskabet af "1C-manuskriptforfattere" begyndte at vokse, hvilket i høj grad blev lettet af den anden rapport ved Infostart-begivenheden i 2015.

Hvordan ser det ud

Import bruger et særligt præprocessordirektiv #Use (#Use) Det er ikke i den originale 1C-platform, men for at lette importen af ​​biblioteker var vi nødt til at bevæge os væk fra den kanoniske syntaks og låne en løsning fra andre økosystemer.
#Use json // classReaderJSON er deklareret i biblioteket og er tilgængelig takket være direktivet #UseReaderObject = NewReaderJSON(); // noget kode følger // ...
En specifik løsning var allerede udviklet af et team af forfattere, applikationsscenarier, faldgruber osv. Google Docs blev brugt som et brainstormingværktøj.

pakke manager

For at administrere pakker blev der skrevet en simpel pakkehåndtering på knæet, kaldet OPM (OneScript Package Manager). Det er også skrevet i 1Script og er et konsolbaseret pakkehåndteringsværktøj. I øjeblikket nytænker vi pakkeinfrastrukturen og arbejder på en produktionsklar version af opm.

Projekt i dag

I dag er 1Script et stabilt, med succes brugt i snesevis af virksomheders automatiseringsværktøj til 1C-kælenavne. Derudover er OneScript allerede en slags brand, dette navn er kendt i samfundet, værktøjet bliver aktivt brugt, skrevet, stillet spørgsmål, diskuteret og, hvilket er særligt rart, afsluttet.
Derudover er et bibliotek af genanvendelige kodepakker en næsten integreret del af projektet. Den er lille, men dækker en væsentlig del af de opgaver, der dagligt løses af et typisk 1C-kælenavn.
Dette er ikke længere kun en "1C-tolk". Fællesskabet har skabt et økosystem af nyttige og populære værktøjer.
For mig var det en unik oplevelse, jeg modtog ord (og gerninger) af støtte fra snesevis af mennesker, jeg ikke kendte (og nu kender jeg allerede). Et program, som jeg startede udelukkende for at "prøve det" er blevet til et arbejdsprojekt, der bruges i rigtige kampmissioner. Derudover er der opnået en enorm erfaring med at styre et sådant open source-projekt - support, vedligeholdelse, infrastruktur osv ...
Og vigtigst af alt - du får fornøjelsen af ​​at gøre noget, du har brug for.

Hvad vi planlægger at gøre næste gang

Den aktive brug af pakkebiblioteket afslørede en række mangler og ulemper. Vi planlægger at foretage justeringer af pakkeinfrastrukturen og udvide funktionaliteten af ​​pakkeadministratoren. Vi planlægger også at udvide sættet af biblioteker, for eksempel arbejder vi i øjeblikket på en wrapper til Docker API. Vi administrerer docker-containere ved hjælp af 1C-scripts, og udviklinger om dette emne vil sandsynligvis også blive offentliggjort, når de kommer i tankerne. Dette vil resultere i en forenklet DSL til containermanipulation fra 1script.

teknisk resumé

  • Programmeringssprog - C#, .NET v4.0/Mono 3.1x
  • Udviklingsmiljø - VS 2013-2015
  • Navnet på fortolkeren er oscript.exe (kør til udførelse - oscript )
  • Script-filtypen er .os
  • Pakkefiltypen er .ospx
  • Kodeydelse - i de fleste målinger op til 4 gange hurtigere end den originale 1C platform. I hvert fald ikke langsommere end hende.
  • Engine repository - github.com/EvilBeaver/OneScript
  • Bibliotekslager - github.com/oscript-library
Jeg skriver ikke projektets hjemmeside, for det første, så det ikke lyder som PR, og for det andet kan det simpelthen ikke tåle habraeffekten. Hvis du har dit eget projekt, som du gerne vil bringe frem i lyset, så lad mig give dig et par tips baseret på personlig erfaring.
  • Tør! Hvis du holder dit projekt på bordet og ikke fortæller nogen om det, så er der ingen, der ved om det. Start med en artikel om Habr. En artikel vil ikke være nok. Nævn dit projekt i fora dedikeret til emneområdet for dit projekt, giv eksempler på vellykket ansøgning.
  • Vær forberedt på, at der er mange forslag fra folk, og meget færre reelle commits. Tilgangen i stil med "Det er open source, du har brug for det, du gør det," vil desværre ikke fungere.
  • Tænk fremad for at løse "vækstproblemet". Væksten er normalt eksplosiv, og det er ret svært at klare en kraftigt øget pulje af opgaver.
Tilføj tags

baggrund

Under implementeringen af ​​et projekt blev det nødvendigt at udføre javascript-kode (herefter benævnt JS) under kontrol af HTML Document Field-objektet, med resultatet opnået i 1C. Eksemplerne givet i de fundne artikler virkede ikke særlig bekvemme at bruge (en rent personlig mening). Det blev besluttet at forsøge at finde en anden, enklere løsning, der blev ikke afsat mere end 1 dag til søgningen.

DIV.setAttribute("onclick", "alert("Koordinater");");

Udfør scriptet

DIV.klik();

TA-DAH. alt fungerer

Procedure ExecuteScript(TextScript) DIV = Elements.doc.Document.getElementById("TEST"); DIV.setAttribute("onclick", TextScript); DIV.klik(); Slutprocedure

Opdatering pr. 08/02/2016

En anden måde at kalde JS blev foreslået i kommentarerne (tak), hvis du har mulighed for at ændre HTML-koden for dokumentet, så kan du skrive en funktion i den og derefter kalde den. sender JS-koden til den.

og derefter i 1C:

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

Returnerer et JS-resultat i 1C

For at overføre resultatet af scriptet til 1C fra FieldHTMLDocument-objektet, bruger vi en hændelse. Lad os binde en OnClick-hændelse til HTMLDocument Field, der modtager 3 parametre som input:

  1. Det element, som hændelsen fandt sted i (feltet i selve HTML-dokumentet)
  2. begivenhedsobjekt
  3. Tegn på implementeringen af ​​standardadfærden

For at udløse en hændelse ved klik, skal du udføre følgende js-kode

Varevt = document.createEventObject(); // opret et tomt hændelsesobjekt evt.propertyName = "funktion1"; // Jeg foreslår at sætte navnet på resultatet i propertyName prop (noget i stil med en type, eller navnet på den funktion, som dataene blev modtaget fra) evt.data = "156"; //vi videregiver resultatdataene til datapropen document.body.fireEvent("onclick", evt); // udfør hændelsen på clickHtmlDocumentField

Efter at have udført denne js-kode i proceduren, når der klikkes på den anden parameter, vil det hændelsesobjekt, vi oprettede, komme. Hvilket er ret nemt at håndtere.

Eksempel på svarparsing.

&OnClient // få navnet og resultatet af hændelsen Procedure DocOnClick(Element, EventData, StandardProcessing) OperationName = EventData.Event.propertyName; OperationData = EventData.Event.data; Hvis OperationName = "" Så //ikke vores begivenhed Returner; Afslut Hvis; If OperationName = "Function1" Then // process result ElseIf OperationName = "function2" Then // process result //...... EndIf; Slutprocedure

Denne metode fjerner brugen af ​​ventehandlere og giver en praktisk hændelsesidentifikator. Ved hjælp af identifikatoren ved vi præcis, hvilke data vi har modtaget, og hvordan vi analyserer dem.

Tilføjelser fra 26.03.2016

Og også på dette sted opstod der misforståelser (fejlen gengives kun på platformen 8.3.5.1570, men for at forhindre disse situationer i fremtiden, vil jeg give en løsning) Selve årsagen - ved genstart af formularen med dokumentets HTML-felt på tidspunktet for procedurekaldet, ved klik på HTML-feltet, satte platformkaldet fast og bragte hele COM-objektet ned (En undtagelse opstod (htmlfil): Udefineret fejl). Løsningen var at deaktivere standardudførelsen af ​​klikhændelsen og deaktivere hændelsesboblende tilstand. Hvordan du gør dette, se nedenfor.

// deaktiver begivenhedsbobling

Evt.cancelBubble = sand;

// deaktiver standardadfærd

Evt.returnValue = falsk;

Som et resultat vil vi få en funktion til at overføre data til 1s fra JS.

Funktion return1c(navn,data)( var evt = document.createEventObject(); evt.propertyName = navn; evt.data = data; evt.cancelBubble = true; evt.returnValue = false; document.fireEvent("onclick",evt ); );

Konklusion.

Ved at kombinere disse metoder kan du ganske nemt køre den js-kode, du har brug for, og modtage data i 1C til videre behandling.

Implementeringseksempel i

Operatør : "Hej! Mit navn er Maria, firmaet "Windows-alt-på-verden.""

Klient : "Jeg behøver ingenting"

Operatør : "Men vi har de bedste betingelser og..."

Klient (afbryder):"Maria, farvel!"

Operatør (taler):"Vi har arbejdet på markedet siden 2003 og siden da..."

Klient (læg røret på):...

Maria ringer til det næste nummer.

Alle kender den irriterende historie. Efter sådan en dialog vil klienten få en negativ eftersmag, og OknaVsemNaSvete mistede dumt dyrebar kontakt. Selvom operatøren Maria vil modtage løn i slutningen af ​​måneden, så i denne situation er det ikke alle, der er tabere.

Det mest stødende i denne situation er, at Maria virkelig har prøvet, hun tænker oprigtigt, at "de har bare ikke brug for klienter - de tager det ikke" og generelt "men hvordan kan jeg få ham til ikke at lægge røret på?". Det faktum, at nogen overvejer KPI, Mary til pæren - ZP vil blive givet alligevel. I slutningen af ​​måneden vil lederen Aleksey studere 1001 optegnelser af samtalen med sine operatører (det tager mindst 2-3 dage om måneden), skælde ud på sine afdelinger - han vil komme sig som svar på undskyldningerne om, at "igen, opkaldet base var ikke målrettet ...". Alexei sukker trist og deler løn til alle. Den næste måned starter.

Holdet har udviklet sig i mindelighed, meget arbejde er blevet gjort, men det kan ikke fortsætte sådan her. (Med)

Hvad er dårligt i dette tilfælde (men løst med lidt blod):

Operatørernes tilgang på arbejdet

  1. De ringer automatisk. Men uden et klart mål er det svært at opbygge en god dialog;
  2. De ved ikke, hvordan de skal reagere på klientens indsigelse eller reagere uden held;
  3. De lægger på, så snart de begynder at tvivle på succesen af ​​samtalen;
  4. Jeg er sikker på, at han vil modtage løn for processen - derfor gør han alt langsomt, med en pause til hvile, uden den nødvendige motivation;
  5. Alle slagter de eksisterende regler for at ringe til kunder og klager over kompleksiteten og mængden af ​​instruktioner;

Lederstilling


Alle disse problemer er løst i undersystemet "Arranger et opkald!"

(det kan "indlejres" i din 1C, du kan bruge det separat).

"Opret et opkald!" kan:

  • Komponer scripts - talemoduler til operatører
  • Tildel scripttilgængelighed til forskellige grupper og grene
  • Indsamle statistik om brug af script-blokke, opnåelse af mål og fiaskoer, måle konvertering
  • Download opkaldsbasen fra Excel eller brug numrene på kunder, der er blevet ringet op før
  • Vis statistiktavle for operatører
  • Opret ordrer, krav under passagen af ​​scriptet, udfyld alle objekter i din database.
  • Begræns "klik" til script-udsagn vilkårligt
  • Arbejde med sip-telefoni
  • Arbejd med e-mail
  • Forvandl e-mails, webstedsanmodninger til kundeemner og kundebehov ved at uploade dem til systemet
  • Administrer kunder, kundeemner og handler

"Arranger et opkald!" giver dig mulighed for at opbygge en lukket cyklus af interaktioner med klienten.

Stadierne af et sådant arbejde er tilpasset din smag. For eksempel sådan her:

Mulighed nummer 1

  1. Systemet modtog en ny potentiel kunde
  2. Operatøren ringede i henhold til algoritmen, afklarede behovet for tjenesten
  3. Målkontakten blev overført til salgsafdelingen
  4. Lederen opbygger en relation til klienten
  5. Manager laver en aftale

Mulighed nummer 2

Eller sådan her:

  1. Operatøren modtager et indgående opkald
  2. Når du foretager et opkald, lanceres et scenarie til bestemmelse af kundens behov, det nødvendige firma bestemmes
  3. I processen med arbejdet udarbejder operatøren en kundeordre, angiver leveringsdatoen
  4. Ordren overføres til forsyningsafdelingen for montage

Mulighed nummer 3

Nå, eller en anden mulighed:

  1. En ny ansøgning blev lavet på webstedet, webstedet omdirigerer brevet til databasen på denne applikation
  2. Basen analyserer brevet, "henter" modpartsdataene, beskedteksten fra det, skaber et behov og en opgave
  3. En gratis operatør tager opgaven op, ringer til klienten, løser problemet
  4. Hvis klienten kunne lide alt, oprettes enten en ordre, eller klienten overføres til ledere

Mulighed nummer 4

Kom med nogen af ​​dine muligheder!

I slutningen af ​​måneden modtager lederen rapporter:

  1. Ifølge udvidet statistik over kundebehov - hvor mange var, hvor mange var kvalificerede, hvor mange blev afvist - efter enhver status
  2. Om arbejdet med samtalemanuskripter og operatører
  3. Ifølge kontakter med kunder - hvad de talte om, hvor mange gange. Hvor mange ringede, hvor mange bogstaver blev der skrevet.

Hvordan det virker

I "Indstil opkaldet!" indbyggede undersystemer (klikbare):

Scripts

Med scripts mener vi nogle relaterede handlinger i henhold til algoritmen. For eksempel,

  1. Udgående opkald- for at sælge et produkt eller en service, invitere til en kampagne, udfylde et spørgeskema
  2. Indgående opkald- For at behandle ordren korrekt, glem ikke rabatten og leveringen
  3. At udfylde et dokument- standardskema i form af en assistent

Sådan bruges

  • Opret operatørsamtalemønstre i konstruktøren
  • Fuldstændig tilpasningsmuligheder - vis alle felter for at udfylde opkaldsscriptet (spørgeskemadata, for at indtaste en ordre osv.)
  • Post links til interne videnbaseartikler, så operatøren kan besvare eventuelle tekniske spørgsmål
  • Opret ordrer under opkaldsscriptet, indsaml reklamationer, send breve og skift potentielle kunders status
  • Giv stjerneledere mere frihed i opkaldsmanuskriptet. Sådanne medarbejdere kan ikke lide begrænsninger, deres præstation er højere, når samtalen ikke er 100 % begrænset - lav et samtalescript til sådanne ledere, som vil blive brugt som et spørgeskema, og overgangen mellem blokke vil være gratis. Du vil også modtage statistik for disse stjerner, og de vil ikke føle sig "klemmet" af samtalemanuskriptet
  • Tjek operatørernes arbejde i henhold til opkaldsscenarier og optag resultaterne af kontrollen i et særligt dokument
  • Slip af med hacky opkald ved hjælp af konkurrencedygtige scriptudførelsesindstillinger
  • Send tilbudsbreve under opkaldsscript-processen, lav klager fra utilfredse kunder under processen

Scripts er hovedundersystemet til "Arranger et opkald!". Nedenfor er lidt mere om dens indstillinger ved hjælp af et eksempel.

Eksempel

For eksempel kan der være sådan en opgave for operatører: "Du skal ringe til listen over numre, luge ud af ikke-målrettede kontakter og overføre kundeemner til ledere." For at gøre dette vil vi oprette et script i systemet, uploade potentielle aftaler fra xls, operatører vil gennemgå aftaler i henhold til scriptet, luge ud af ikke-mål, og mål vil blive overført til ledere for arbejde. Lad os først oprette et script.

Opret et nyt script

  1. Vi laver et flowchart af dette script - hvad operatøren vil sige, hvilke værdier at vælge, og hvad systemet vil tilbyde ham næste gang
  2. Vi indstiller yderligere scriptfelter - for eksempel på hver blok af scriptet skal det fulde navn på klienten og hans virksomhed være synligt
  3. Angiv hurtige overgange fra hver blok. I hver blok vil der blive vist knapper til hurtige overgange (operatøren kan til enhver tid blive spurgt "Hvad slags virksomhed er du?" - i dette tilfælde klikker operatøren på hurtig overgang, læser blokteksten om virksomheden og vender tilbage til forrige blok)
  4. Vi sætter scriptet op - bliver scriptet logget, vil skemaet være synligt, er det nødvendigt at bruge SIP, hvilke opgaver skal udføres under scriptet mv.
  5. Vi tildeler adgangsrettigheder til det - hvem kan se dette script, oprette et nyt opkald ved hjælp af det osv.

I blokdiagrammet for scriptet angiver vi, hvad operatøren skal sige, hvilke svarmuligheder klienten har, og hvilke felter operatøren skal udfylde på dette trin.

  1. Teksten til operatørens tale. Du kan indsætte yderligere detaljer fra tidligere scriptblokke eller almindelige felter. Kan formatere tekst
  2. Her indstilles tekstparametre - skærmbilledet viser, at [Navn] vil blive udfyldt fra firmanavnet
  3. Vi indstiller, om målet er nået, hvis denne blok er nået, hvilket stadie blokken tilhører ("etablering af kontakt", "at nå sekretæren" osv.) og hvilket resultat, der er opnået, hvis denne blok er nået

Scriptblokken kan have yderligere semantiske betydninger:

  • Du kan placere alle felter på den. For eksempel skal operatøren vælge, hvordan varerne skal leveres til kunden - afhentning, kurer i byen eller intercity. Indtil operatøren udfylder dette felt, går scriptet ikke længere. Nå, i ordningen kan du angive, at hvis du udfyldte intercity, så skal du vise en blok, hvis med kurer, så en anden.
  • De oprettede blokattributter kan fyldes med noget. For eksempel, i den første blok af manuskriptet, fik vi at vide navnet på instruktøren, og i den sidste blok kan vi få disse oplysninger og vise dem på formularen til operatøren
  • Når du flytter længere fra blokken, kan du udføre nogle handlinger. For eksempel, hvis klienten sagde, at han slet ikke er interesseret i os, og det ikke nytter noget at "slås", så sætter vi status "Ikke-målrettet" i behovet. Hvis vi er nået til slutningen af ​​scriptet og er klar til at overføre klienten til næste afdeling, så sætter vi virksomhedens status til "Lead" i stedet for "Ny". Du kan ændre alle felter, ikke kun dem, der er anført ovenfor
  • For spærringen kan du indstille kundesvarsmuligheder - "Ja", "Nej", "Ring tilbage senere", "Vi har et udbud", "Ikke interesseret" osv. Afhængigt af mulighederne kan du forgrene scriptskemaet
  • Mens scriptblokken kører, kan du oprette nogle andre elementer. For eksempel indvilligede klienten i at give sin e-mailadresse - så sender vi ham straks et brev fra KP. Vi angiver blot, at et brev skal oprettes, udfyldes efter skabelonen og sendes til kundens adresse.

I sidste ende ender vi med noget som dette:

Operatøren vil blive præsenteret for scriptbehandlingsformen i menneskelig form " assistent". For eksempel kan en af ​​kredsløbsblokkene se sådan ud:

  1. Teksten skrev vi til operatøren
  2. Detaljer, som han skal udfylde i dette trin
  3. Kundesvarsmuligheder
  4. Manuskriptets formål og opgaver
  5. Tilgængelig på hver blok overgange til andre blokke
  6. Almindelige scriptfelter
  7. Log over udvalgte svar

Efter scriptskemaet er oprettet, kan operatøren allerede nu begynde at ringe - på operatørens arbejdsplads (hvis scriptet har ret til at oprette), kan du klikke på knappen "Opret", vælge det ønskede script og f.eks. næste telefonnummer fra xls-tabellen, arbejd på det:

På dette stadium kan operatører allerede arbejde i henhold til scriptet, men der er besværet ved at tage kontakter fra bordet - dette fører til en række typiske fejl.

Download kontakter fra et Excel-regneark til generelle opkald

Vi uploader ikke kun virksomheder med deres kontaktoplysninger, men "potentielle aftaler" (også kaldet "Leads") i "Kvalificeret"-status. Lad os sætte scriptet op på en sådan måde, at det vil ændre status for kundeemner, efterhånden som det går - fra "Afvist" til "Udnævnt". Derfor vil vi se på tragten for denne opkaldsbase.

Lad os oprette en dataindlæsningsindstilling:

  1. Filen, som vi indsamler data fra
  2. De data, der skal indlæses i databasen
  3. Hvordan vil data blive indlæst?

I indstillingerne kan du angive udfyldningen af ​​alle detaljer om de oprettede objekter. Vi vil oprette en potentiel aftale fra virksomheden i status "Kvalifikation" og "scriptudførelse" - et objekt klar til operatøren til at arbejde i henhold til scriptet, udfyld projektet, så vi senere kan filtrere resultaterne af opkaldet til denne database ved det:

Vi udfylder ikke operatøren, så alle kan se de oprettede elementer og tage dem med i arbejde. Oprettede scripts vil være tilgængelige via operatørens arbejdsplads:

Operatører trykker på knappen " Næste" - systemet vælger det næste script i rækkefølge og begynder at behandle det. Således:

  • Operatører har altid "up-to-date information" for øjnene - der er ingen duplikerede opkald
  • Klienter, der bad om at ringe tilbage efter nogen tid, er sat på pause - sådanne scripts vises i samme vindue med datoen for den næste kontakt.
  • Operatører ser statistikken for kolleger ved opkald - dette motiverer dem selv til at arbejde:

Operatører ser deres statistik mere detaljeret:

Tja, hvis operatørerne er snedige, kaster komplekse opkald i forvejen eller prøver at "reservere" så mange scripts som muligt, så kan du begrænse udstedelsen af ​​scripts ved at bruge konkurrenceregler. Du kan indstille følgende begrænsninger:

  • Ikke mere end X scripts på Y minutter
  • Efter at have udført scriptet, vent X minutter
  • Du kan ikke lade mere end X scripts vente

På dette stadie vil vi have en veludviklet leadbase - ikke-kerne-leads bliver frasorteret, og den relevante status tildeles de centrale. Her er operatørernes arbejde afsluttet, nu er salgscheferne med.

Tilknytning til procesledere.

Lederen af ​​salgsafdelingen går ind i kataloget over virksomheder, vælger kun dem, der er kvalificerede ved at ringe og udpeger ansvarlige ledere i transaktioner:

Lederen indtaster behovet for den klient, der er tildelt ham, og begynder at arbejde i henhold til klientens behov. Alle interaktioner registreres på behovskortet:

Analyse af resultater

Manageren ser både statistikken for hver operatør og konverteringen af ​​hvert script:

I henhold til status for behandlede behov kan du bygge en tragt:

Vidensgrundlag

I videnbasen kan du placere artikler kategoriseret. For hver kategori kan du konfigurere adgang til at se og oprette individuelle brugere. Et link til en artikel kan placeres i scripthandleren.

Sådan bruges

  • Opret materialer om dine produkter og placer links til dem i samtalescriptet - så vil dine operatører være i stand til at besvare tekniske spørgsmål fra kunder
  • Placer beskrivelser af brugen af ​​samtalescriptet i artikler og giv det til nye medarbejdere til gennemgang

CRM

Et lille system til at arbejde med kunderelationer. Det inkluderer en oversigt over virksomheder (den indeholder et link til modparten, hvis "Arranger et opkald!" skal indlæses i en fungerende konfiguration), kontakter fra disse virksomheder og potentielle aftaler. Ledere arbejder på potentielle transaktioner med modparter og poster dem i henhold til forskellige statusser. Salg oprettes for gennemførte handler og betaling kontrolleres. I slutningen af ​​måneden evaluerer lederen, hvor mange kontakter der blev skabt, hvilken aflønning der tilkommer leadgeneratorer, og hvilke indikatorer hver af lederne har.

Sådan bruges

  • Hold styr på statistik og analyse af kundetransaktioner
  • Afspejle alle muligheder for at arbejde med kunder
  • Upload nye kundeemner for at ringe
  • Håndtere "glemte" og "tabte" kunder
  • Kontroller ydeevnen af ​​tjenester

Hver virksomhed kan indeholde unikke detaljer efter type aktivitet:

For hver virksomhed (og potentiel handel) vises historikken for interaktioner:

Alle kommende interaktioner vises i "feedet", enhver leder har hurtig adgang til dem til enhver tid. Feedet viser også kommentarer, der er sendt til dig - for eksempel efterlader en logistiker en kommentar "Når vi leverer" i en kundes forespørgsel, og den ansvarlige for leveringen ser dette i sit feed.

Lederen kan evaluere sine underordnedes arbejde i forhold til antallet af kontakter med klienter. Hvor mange gange, der ringede, skrev breve, kommunikerede i messengeren, hvilken slags kundeemner blev interageret med.

Mail klient

Undersystemet giver ikke kun afsendelse og modtagelse af post. Der er sådan noget som et mailfilter, det hjælper med at bestemme, hvad der skal gøres med et bestemt brev. For eksempel har du en feedbackformular på dit websted, så snart brugeren udfylder den, vil en e-mail med teksten til appellen blive sendt til din e-mailadresse. Filtrer i "Arranger et opkald!" kan konfigureres på denne måde - "hvis brevet kom fra adressen [e-mailbeskyttet], så skal du hente det fulde navn, kundens behov fra brevets tekst og oprette en ny potentiel aftale baseret på disse data. "Du kan således angive reglen om, at bogstavet falder ind under filteret og filteret handlinger til dette brev.

Til dette tjener de:

  • Detaljer om brevet - yderligere felter i brevet, for eksempel "Navn", "Leveringsadresse", "Telefon", "Beskedtekst"
  • Udfyldelse af detaljerne fra brevet - reglerne for, at systemet "får" information fra brevets tekst til detaljerne
  • Filterhandlinger - hvilke nye e-mail-objekter skal oprettes, og hvordan de udfyldes

Sådan bruger du:

  • Opsæt automatisk indsamling af applikationer fra webstedet og tildeling af opkaldsadministratorer i henhold til samtalescenariet for disse potentielle kunder
  • Konverter produktanmodninger (de kommer for eksempel til en bestemt e-mail) til et "kundeanmodning" dokument, følg dokumentet i de rigtige retninger
  • Styr ledernes arbejde med klienter via mail direkte fra databasen

Dokument regnskab

Giver dig mulighed for at rette dokumenter i systemet efter deres typer, begrænse adgangsrettigheder til dem. For eksempel kan du lave dokumenttypen "Kvalitetskrav" og kun give adgang til den til "QC"-afdelingen. I dette dokument vil du have et par nye detaljer, såsom "Krav tekst", "Ansøgningsdato", Resultat" mv. Eller du kan samle "Jobeansøgninger" fra kunder, vedhæfte filer til dem og sende dem igennem statuss (" Ikke startet", "I gang", "Beregnet", "Aftalt", "Afvist").

Sådan bruges

  • I indstillingerne for mailfiltre kan du oprette applikationer og anmodninger om produkter direkte fra kundens breve
  • I forbindelse med samtalescenarier kan du generere dokumenter direkte under opkaldsscenariet (f.eks. er en klient utilfreds med kvaliteten af ​​tjenesterne - vi opretter et "Krav", som derefter vil blive behandlet af QCD-afdelingen)

Det ser sådan ud:

  1. Dokumentstatus
  2. Dokumenttype, der bestemmer tilstedeværelsen af ​​detaljer i dokumentet
  3. Yderligere dokumentoplysninger

En virtuel maskine, der udfører scripts i 1C:Enterprise.

Med andre ord er dette muligheden for at skrive programmer i 1C uden at bruge 1C:Enterprise platformen.

Og dette giver os mulighed for til sidst at tage færdige stykker kode skrevet i konfiguratoren og overføre dem til et OneScript-program med minimal tilpasning.

Og selvom det ifølge udviklerne ikke er projektets hovedmål, men jeg ser en interesse i at forbinde fra et OneScript-program til 1C-databasen gennem en ekstern forbindelse og udføre noget nyttig kode.

Du spørger - hvorfor er det overhovedet nødvendigt? Hvorfor ikke skrive den samme kode i behandlingen og køre den igennem 1'er på standardmåden?

Men vi taler om automatisering, og der er grundlæggende problemer her:

  • der er ingen måde at garantere, at basen vil starte og udføre koden for en eller anden ekstern behandling i den (den, der har stødt på dette i praksis ved, at for meget kan gå galt, startende med det faktum, at behandlingen simpelthen ikke når udførelsen pga. til et eller andet modalt vindue)
  • der er ingen nem måde at generere en sådan behandling programmatisk, men vi kan få brug for dette, når det kommer til at udføre nyttig kode over en gruppe af baser
  • der er ingen nem måde at logge udførelsen af ​​denne behandling på

Alle disse problemer løses af OneScript.

Hvorfor skrive og køre disse scripts i opdateringsprogrammet?

Fordi opdateringen påtager sig en række vanskelige ting for at forenkle at skrive sådanne scripts med hensyn til interaktion med databaser.

Nemlig.

Liste over grundlag for forarbejdning

Lige i opdateringsprogrammet vælger vi, hvor mange databaser vi skal bruge for at køre det script, vi skrev:

Bestå basisparametre

Når scriptet udføres, sender opdateringsprogrammet selv de nødvendige parametre til det med information om den aktuelle database:

Vi kan bruge alle disse parametre i vores script, hvilket gør det universelt til udførelse på et vilkårligt antal udvalgte baser.

Vi kan finde eksempler på sådanne scripts i listen over opdateringsskabeloner:

Database præ-arkivering

Om nødvendigt vil opdateringsprogrammet sikre, at der oprettes en sikkerhedskopi, før scriptet udføres:

Denne backup vil være i overensstemmelse med det generelle arkiveringssystem, det vil sige, at den også kan "tunes" i de avancerede indstillinger af opdateringsprogrammet. En sådan kopi vil altid være mærket "før farlig drift".

Lås, oplås base

Om nødvendigt vil opdateringsprogrammet udføre en fuld databaselås, før dit script udføres og låse op efter:

Og dette er en af ​​de vigtigste "funktioner" i opdateringsprogrammet - for eksempel er den korrekte udførelse af blokering af serverdatabasen i det generelle tilfælde en ret ikke-triviel opgave.

Det er nødvendigt at "løse" de aktuelle brugerforbindelser, administrative forbindelser, baggrundsopgaver. Og alt dette gennem kommunikation direkte med 1c-klyngen.

Gemmer rapporter

Opdateringsprogrammet gemmer udførelseshistorikken for sådanne scripts i rapporthåndteringen.

Som i generelle vendinger:

Så i detaljer:

E-mail notifikation

Hvis du har konfigureret e-mail-meddelelser (alle eller kun ved fejl)...

Derefter vil oplysninger om udførelse af scripts (inklusive detaljerede rapporter) komme til dig på samme måde som oplysninger om udførelse af andre operationer fra opdateringsprogrammet:

Kør et script efter en tidsplan

Skyovervågning

Når vi gemmer scriptet, har vi også mulighed for at overvåge dets arbejde i skyen - en helt fantastisk mulighed efter min mening. Det handler om skyovervågning.

Multi-threaded script udførelse

Hvordan man kører scriptet parallelt for flere databaser er beskrevet i detaljer.

Hvad er ellers nyttigt at lære, før du skriver manuskripter?

Nå, selvfølgelig, selve 1C-sproget. Hvor uden ham...

Først og fremmest er der denne 1C sprogguide med eksempler:.

Det er også værd at gennemgå forskellene mellem OneScript og standard 1C-sproget. Der er få af dem (link).

Hvordan finder jeg på mine egne scripts?

Til inspiration råder jeg dig først til at analysere og forstå scripts fra opdateringsskabelonerne. Dette vil give dig meget.

Og hvis du har brug for en idé til at skrive et script, der vil være nyttigt for hundredvis af andre brugere, så beder jeg dig - skriv til mig om det på enhver måde, der passer dig. Jeg har enormt mange ideer, men der er ikke tid og muligheder nok.

For at gøre dette startede jeg et særligt projekt på github, hvor jeg samler nyttige scripts fra opdateringsbrugere, så så mange mennesker som muligt kan bruge dem i deres arbejde.

Vil du sende mig dit manuskript? Jeg beder dig om det.

Med venlig hilsen Vladimir Milkin(lærer og udvikler).