Hva er et skript for 1s. "Arranger en samtale!" lar deg bygge en lukket syklus av interaksjoner med klienten

I denne artikkelen vil jeg prøve å gi et par tips om å sette opp skriptaktivering på nettsteder som bruker 1C.

Hvorfor kan dette være nødvendig? I mitt eksempel trengte jeg å kjøre php-skriptet for å aktivere nedlastingen på nettstedet, hvis cms er 1C-Bitrix. De. filen er lastet ut fra 1C og signaliserer nettstedet om å hente filen. Dermed oppnås en høy effektivitet av utveksling med nettstedet.

Faktisk er det ikke noe vanskelig i denne prosessen, men på grunn av detaljene i denne prosedyren kan programmereren ha noen problemer med denne handlingen.

Oppgavebeskrivelse:

Det var nødvendig etter å ha lastet opp datafilen fra 1C å laste opp filen til nettstedets database så snart som mulig. For å gjøre dette opprettet programmereren som utvikler nettstedet et skript som utførte to handlinger - det sjekket autorisasjonen og aktiverte utvekslingen fra nettstedet. Selve php-skriptet så slik ut: "http:// /1c_prices_import_run.php".

La oss se hvordan dette skriptet ble lansert.

FÅ forespørsel fra 1C

Først opprettes et objekt HTTP-tilkobling", ved hjelp av hvilken vi utfører autorisasjon:

Få 267 1C-videotimer gratis:

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

I parametrene passerer jeg php-skriptadresse, passord og pålogging. Dette er nok hvis du ikke har andre vanskelige forhold som sikker autorisasjon og en proxy-server.

Mitt andre trinn var å sjekke tilkoblingen, i tilfelle vellykket autorisasjon returnerte dette skriptet ordet "suksess" til meg:

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

I parametrene til Get-metoden (ligner på GET), spesifiserer vi parameteren " ?modus=sjekkauth", som viser at det bare er et ping. Den andre parameteren, "ResponseFileName", er filen som serverens svar vil bli skrevet til.

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

Det er alt. Alt er ganske enkelt og fungerer perfekt på 1C-siden.

Vel, til slutt vil jeg vise hele koden i sin helhet:

RequestFileName= GetTempFileName();

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

Unntak

Slutt på forsøk;

HTTP.Get( http:// /1c_prices_import_run.php?modus=sjekkauth", RequestFileName); // autorisasjonssjekk

Unntak

Slutt på forsøk;

ResponseFile = New File(ResponseFileName);

Hvis ResponseFile.Exists() Da

Tesen om at åpen kildekode er skapt av entusiastiske nerder har mistet sin relevans i vår tid. Likevel ble ideologien med åpen kildekode født akkurat slik. Kule programmer skrevet om natten av skjeggete (og ikke så) raringer, uinteressert, bare for å gjøre verden til et bedre sted - endret verden av programvareutvikling.

Enhver programmerer drømmer i all hemmelighet om å gjøre noe stort og lyst som alle kan like. Hvis du forteller meg at du ikke er en av de personene, at du bare liker å lukke billetter i en fungerende feilsporing, og du ikke drømmer om å gi ut prosjektet ditt til den store verden, så vil jeg ikke tro deg. Eller jeg vil foreslå et karriereskifte. Jeg er overbevist om at en programmerer er en artist, og det er viktig for en artist å gjøre noe eget, kanskje bare «på bordet» – men å gjøre det.

En dag dukket en idé til et prosjekt opp i hodet mitt. Ideen var ren forskning og jeg hadde ikke tenkt å lage et slags "produkt" ut av det. I tillegg hadde jeg aldri drevet åpen kildekode-prosjekter før, og jeg ville virkelig prøve hvordan det hele fungerer. Hva kom ut av det - under kuttet.

Helt i begynnelsen av prosjektets livsvei skrev jeg allerede om det på Habré. Så var det de første trinnene, koden var rå, men den fungerte. Jeg ønsket at prosjektet skulle vekke interesse fra andre forfattere, siden jeg åpenbart ikke ville ha trukket det alene og generelt sett forlatt det. I prinsippet hadde dette skjedd hvis jeg ikke hadde mottatt min første pull-forespørsel fra en fremmed. Men først ting først...

Hva handler dette om?

Jeg laget min egen implementering av en stackmaskin som kjører skript i 1C: Enterprise-språket. Eller, for å si det enklere, en åpen tolk av 1C-språket og en åpen implementering av noen standard 1C-klasser. Samtidig ble det satt et klart anvendt mål for prosjektet – å gi 1C-kallenavn et skriptautomatiseringsverktøy som ville være enkelt å lære. Prosjektet fikk navnet 1Script.

Og så er prosjektet publisert på Habré og på den spesialiserte 1C-portalen infostart.ru. Jeg venter på tilbakemelding. Jeg fikk det første svaret på mistet og lo hjertelig. Emnet på forumet het «Tolk 1C på Habré. La oss holde kjeft?" Det er mange flinke folk på tåken, jeg var glad :)

Så kom mer eller mindre dekkende spørsmål, som jeg svarte flittig på, hvorpå artiklene i vanlig modus gikk ned fra de første sidene et sted og ned, og interessen for prosjektet avtok. Vel, det var forventet slutt, jeg ble litt irritert, men ikke mye. Egentlig regnet jeg ikke med noe spesielt resultat. Chattet og greit. Dagene gikk, jeg fullførte noe, la til og med ut en annen versjon, men ingen bortsett fra meg trengte det. Bålet mitt har tørket ut. Selv om jeg ikke ble skuffet, sluttet jeg å skrive ny kode.

Andre Vind

Omtrent to måneder etter publiseringen ble jeg kontaktet av Sergey Batanov (Serega, hallo! :) - en fremtredende fyr i 1C-samfunnet, som tilbød sin hjelp til å utvikle standardbiblioteket. Det var 1C-ovsky-klassen "Table of Values". Selvfølgelig var jeg enig. Og da jeg så den virkelige koden som Sergey sendte, ble jeg glad som et barn, virkelig. Det skjer ofte på Internett når noen tilbyr noe i ord, men ofte kommer det ikke til poenget. Og her er den virkelige live-koden som fungerer, som er helt tilstrekkelig, som kan settes inn i prosjektet!

Samtidig er oppgaven ganske stor, jeg ville vært for lat til å gjøre det selv. Og her - et håndgripelig, virkelig nyttig, målbart med linjer med kodebidrag til det totale prosjektet! Kort sagt, jeg vil ikke være uærlig hvis jeg sier at det var Sergey som gjorde det slik at prosjektet ikke ble forlatt av meg. Det er en fantastisk inspirasjon å få hjelp fra en fremmed. Bare sånn, fordi han var interessert i det du startet.

Etter hvert begynte jeg å motta tilbakemeldinger fra folk som prøvde motoren og spurte "hvor er denne funksjonen?", "Men hvordan gjør jeg dette?" Jeg måtte svare på alle disse spørsmålene, si at dette er en prototype, og legge til disse funksjonene selv så raskt som mulig. Men entusiasmen gikk av skala: "Folk er interessert og prøver å søke," så nye funksjoner ble lagt til ganske raskt. I utgangspunktet hadde ikke standardbiblioteket engang funksjoner for å jobbe med filer.

Dessuten

Etter en tid skrev Alexander Kuntashov til meg med et spørsmål om integreringen av 1Script og Snegopat-prosjektet (www.snegopat.ru). Hvem vet ikke - dette er en slik resharper for 1C. Den lar deg lage script-plugins for 1C Configurator, og det er et helt fellesskap av forfattere av slike plugins.
Disse pluginene ble skrevet i JavaScript, og krevde derfor kvalifikasjoner som gikk utover standard 1C-programmereren. På grunn av dette ble utviklingen av plugin-økosystemet til slutt også bremset. Antallet personer som ønsker å forbedre konfiguratoren er omtrent lik det totale antallet 1C-kallenavn, men behovet for å lære seg JavaScript skremmer bort forfatterne av potensielle mesterverk.

Igjen, jeg var kjempefornøyd med etterspørselen etter hjernebarnet mitt, tryglet forfatteren om distribusjonssettet til Snegopat og børstet støv av kunnskapen min om C++. Det var mye mer støv enn kunnskap, men den kreative kløen gjorde jobben sin, og jeg stupte inn i MSDN.

Omtrent en måned senere, i 1C Configurator, ble det mulig å skrive plugins direkte på 1C-språket uten å bytte til JavaScript-redigeringsvinduet. Samtidig ble de første kritiske feilene til motoren fikset og den interne arkitekturen ble betydelig revidert.
Jeg fikk en stor glede av å kommunisere med C++, COM, ATL og alle disse tingene, etter mange år med utelukkende arbeid med 1C. Vel, og også fra det faktum at han gjorde noe nyttig, håndgripelig for 1C-nick-samfunnet.

Den første opplevelsen av kampbruk

Omtrent på samme tid (jeg husker ikke nøyaktig) ble prosjektet oppmerksom på Alexei Lustin () (Lech, hei til deg også!) - blant 1C-kallenavnene til en kjent og respektert person. Dette falt sammen med mitt søk etter en ny jobb. Jeg lette etter interessante selskaper på markedet, og Alexey lette etter spesialister for Continuos Integration / Continuos Delivery-prosjektet for 1C-kallenavn. Da så Lesha allerede prosjektet mitt (og kallenavnet) på Habré, og jeg visste allerede at et visst team med avanserte 1C-kallenavn gjorde interessante ikke-standardiserte ting på nettverket.

I det øyeblikket visste fellesskapet allerede slike ting som enhetstesting, lagring av 1C-kode i git, BDD + agurk for 1C, og så videre. Alexei virket for meg den mest tilgjengelige av disse karene, og jeg skrev et brev til ham og spurte om han hadde en interessant jobb. Så, sammen med prosjektet mitt, kom jeg inn i et muntert selskap med nerder som hadde samlet seg på den tiden i selskapet der Alexey jobbet.

På det tidspunktet hadde motoren allerede minimumssettet med kapasiteter som kreves for skriptet, og det kunne (som det virket for meg) brukes i prinsippet som et skript for å sette sammen og distribuere 1C-databaser.

Hvorfor bruke en ny motor til dette?

Faktisk er det en million skriptspråk, det er ikke klart hvorfor ett til trengs, og til og med et ukjent - vil leseren av Habr spørre - og han vil ikke ha helt rett. Strategisk sett var det fremtidige produktet ment for 1C kallenavn og ville måtte leve fra utvikler til utvikler, uavhengig av personalendringer i selskapet. Det er et objektivt problem i 1C-nick-samfunnet: det er mange gode spesialister blant dem, men av en eller annen grunn ønsker ikke den gjennomsnittlige 1C-nick å lære noe annet språk etter at han har fått tak i 1C-godt. Jeg vet ikke hva som er årsaken til dette fenomenet, sannsynligvis fordi 1C regler (ironi)? Folk kommer til 1C og kjenner Java, C/C++, mikrokontrollere, Delphi eller ingenting, men de blir ofte i 1C og er motvillige til å flytte tilbake til sine opprinnelige økosystemer.
Jeg ser nå en bølge av sinne, men vær så snill, lytt til oppgaven til slutten. Det er unntak fra enhver regel, men når du planlegger et system som må overleve flere generasjoner av utviklere (ikke biologiske, men menneskelige generasjoner, selvfølgelig), vil du mest sannsynlig finne en spesialist som kan utvikle det hvis det er skrevet i 1C . Hvis det er en python (eller sett inn favorittspråket ditt), må du ansette en pytonist som kan 1C veldig godt. Og etter hans overgang til store sjefer, må du se etter en annen av de samme, med kompetanse innen 1C. Og hvis det umiddelbart er et 1C-språk, så trenger du bare å finne et 1C-kallenavn som kan 1C godt og det er nok.
Systemet vil med andre ord være mer seigt og vil kunne utvikles av flere spesialister dersom det er skrevet på et språk som er kjent for alle.

Dermed ble omfanget av 1Script klart: dette er DevOps og lignende oppgaver for 1C-prosjekter.

Første støt og riktig utvikling

Det første mer eller mindre store manuset jeg skrev (før det var det tekster på ikke mer enn hundre linjer) fikk motoren til å krasje. Med en viss kombinasjon av parametere og anropskjeder ble kontrollen overført til et ukjent sted i koden, og applikasjonen krasjet. Jeg måtte nesten fullstendig omskrive implementeringen av samtalestakken og unntakshåndteringen. Det var en utfordring i stil med «Å du er så! Vel, jeg skal fikse deg!" Kampsikringen gjorde det mulig å omskrive de nødvendige modulene på en dag og i tillegg identifisere et par feil. Koden begynte å kjøre stabilt. Jeg har gitt ut en ny utgivelse. Underveis, siden jeg nå var engasjert i Continuous Integration, kom det til en erkjennelse at prosjektet også trengte en byggeserver og utgivelsesautomatisering. I tillegg ble han med i prosjektet, kjent blant 1C-kallenavn som en coryphaeus og guru for 1C-testing. Han laget meg et verktøysett for å teste motoren basert på xUnitFor1C-rammeverket hans. Så jeg fikk aksepttester for atferd, også skrevet på 1C-språket. Jeg plukket opp TeamCity på hjemmeserveren min og satte opp nattlige builds med testkjøringer. Underveis ble jeg ladet med entusiasme – prosjektet lever videre og får nye bidragsytere. Det var vilt inspirerende.

I tre eller fire måneder har motorklassebiblioteket endelig fått alt som er nødvendig for de fleste skriptoppgaver: nettverksfunksjoner, arbeid med arkiver, XML og så videre har dukket opp. Vårt CI-prosjekt for 1C har blitt lansert.

Omtrent på samme tid, takk, igjen, begynte nye interesserte brukere å komme til prosjektet. De ba om funksjoner, fant feil, krevde nye utgivelser.
Flyten av funksjoner, tildelingen av bibliotekskode, kombinert med behovet for en enkel utgivelsesplan, førte meg til en så interessant ting som vekstproblemet. Men om henne, litt senere.

I november 2014 ble jeg invitert til å tale på den prestisjetunge 1C Infostart Event-konferansen i St. Petersburg. Selvfølgelig takket jeg ja, og jeg tok 1Script som tema for talen. Emnet ble godkjent, noe som for meg for det første betydde at prosjektet ble en viss popularitet (dvs. lyttere vil sannsynligvis komme, fordi de i det minste hørte noe om det), og for det andre håpet jeg å tiltrekke meg bidragsytere, siden det var nesten ikke tid til utvikling av motoren.
Spesielt for konferansen laget jeg til og med en spesiell morsom - CGI-modus, der skript kunne kjøres under kontroll av en HTTP-server og generere HTTP-utdata. Nettsteder på 1C-språket er ikke lenger et hosters mareritt, men en hard realitet (bare tuller).
Talen på Infostart kan betraktes som den første offentlige kunngjøringen der 1Script ikke lenger kunne være flau over å bli kalt et produkt, et verktøy som er i stand til å løse spesifikke problemer. Det var ikke lenger et eksperiment, men et kampprodukt. Selv om den fortsatt er i betastatus.

Vekstproblem eller fallgruver for prosjektstøtte

Det viste seg at tilstedeværelsen i din avdeling av et etterspurt prosjekt, selv et lite, bærer en så betydelig belastning av overheadkostnader. For det første er det en funksjonsstrøm. Ønsker kommer mye oftere enn forpliktelser som gjennomfører disse ønskene. Det er påkrevd å strengt tatt hensyn til versjonene der visse feil ble rettet. Det kreves på en eller annen måte å varsle brukere om at en feil har blitt fikset siden versjon X eller en ny funksjon har dukket opp. Veksten av funksjonalitet krever dokumentasjon, og dokumentasjon har en tendens til å bli foreldet.
Vel, det morsomme er at den tekniske infrastrukturen til den faktiske "støtten" er nødvendig. Vi trengte et nettsted, en dokumentasjonsgenerator, en bygg-/distribusjonsserver, og så videre og så videre... Det var nødvendig med økonomiske investeringer i infrastrukturen - minimale, men fortsatt investeringer.
Da jeg startet et forskningsprosjekt, forestilte jeg meg ikke engang så mange organisatoriske og tekniske problemer som jeg måtte møte etter hvert som prosjektet vokste. Overgangen til git-flow-teknikken hjalp mye i denne forbindelse, det ble lettere å finne ut av det selv og kommunisere med brukere om versjoner og grener.

Crowdfunding-opplevelse (forferdelig ord)

I begynnelsen av dette året prøvde jeg å gjennomføre et eksperiment - jeg organiserte en samling av donasjoner for infrastruktur - et domenenavn og hosting. Jeg lurte på hvor mye prosjektet kunne betale for sin egen eksistens. Resultatet var at folk ukjente for meg, faktisk sendte omtrent 100-500 rubler hver. som var nok til å betale for et domenenavn i .io-sonen. Deretter ble kampanjen begrenset og pengestrømmen stoppet. Den nådde ikke full tilbakebetaling, selv om det ble mottatt noe økonomisk støtte.
Det viktigste er at oppgaven om effektiviteten til donasjonsmodellen som sådan ble testet i naturen. Konklusjon - i mitt tilfelle kan donasjon neppe kalles effektiv, selv om den ikke var null.

Bibliotek med nyttige skript

På halvannet år med koding i 1Script har det dukket opp bibliotekblokker som du kan bruke selv og anbefale til andre. På en naturlig måte akkumulerte jeg en rekke utviklinger som var egnet for gjenbruk.
Dette førte til at muligheten til å koble til tredjeparts "pakker" også skrevet i 1Script ble lagt til motoren. Resultatet ble et annet prosjekt kalt oscript-library. (https://github.com/EvilBeaver/oscript-library) Dette biblioteket krevde selvfølgelig også infrastruktur, dokumentasjon, sluttbrukeroppdateringer og mer. Men strømmen av å bidra fra 1C-kallenavn har vokst betydelig. Tross alt er pakker utviklet på et allerede kjent språk, noe som betyr at du umiddelbart kan dra nytte av, portere eksisterende utviklinger osv. Fellesskapet av "1C-manusforfattere" begynte å vokse, noe som ble i stor grad tilrettelagt av den andre rapporten på Infostart-arrangementet i 2015.

Hvordan ser det ut

Import bruker et spesielt forbehandlerdirektiv #Bruk (#Bruk) Det er ikke i den originale 1C-plattformen, men for å lette importen av biblioteker, måtte vi gå bort fra den kanoniske syntaksen og låne en løsning fra andre økosystemer.
#Use json // classReaderJSON er deklarert i biblioteket og er tilgjengelig takket være direktivet #UseReaderObject = NewReaderJSON(); // noen kode følger // ...
En spesifikk løsning var allerede utviklet av et team med forfattere, applikasjonsscenarier, fallgruver osv. Google Docs ble brukt som idédugnadsverktøy.

pakkeansvarlig

For å administrere pakker ble det skrevet en enkel pakkebehandler på kneet, kalt OPM (OneScript Package Manager). Det er også skrevet i 1Script og er et konsollbasert pakkeadministrasjonsverktøy. For øyeblikket revurderer vi pakkeinfrastrukturen og jobber med en produksjonsklar versjon av opm.

Prosjekt i dag

I dag er 1Script et stabilt, vellykket brukt i dusinvis av selskapers automatiseringsverktøy for 1C-kallenavn. I tillegg er OneScript allerede en slags merkevare, dette navnet er kjent i samfunnet, verktøyet blir aktivt brukt, skrevet, stilt spørsmål, diskutert og, som er spesielt hyggelig, ferdigstilt.
I tillegg er et bibliotek med gjenbrukbare kodepakker en nesten integrert del av prosjektet. Den er liten, men dekker en betydelig del av oppgavene som løses daglig av et typisk 1C-kallenavn.
Dette er ikke lenger bare en "1C-tolk". Fellesskapet har skapt et økosystem av nyttige og populære verktøy.
For meg var det en unik opplevelse, jeg mottok ord (og gjerninger) av støtte fra dusinvis av mennesker jeg ikke kjente (og nå kjenner jeg allerede). Et program som jeg startet utelukkende for å "prøve det ut" har blitt til et fungerende prosjekt brukt i ekte kampoppdrag. I tillegg har en enorm erfaring med å administrere et slikt åpen kildekode-prosjekt blitt oppnådd - støtte, vedlikehold, infrastruktur, etc ...
Og viktigst av alt - du får gleden av å gjøre noe du trenger.

Hva vi planlegger å gjøre videre

Den aktive bruken av pakkebiblioteket avdekket en rekke mangler og ulemper. Vi planlegger å gjøre justeringer av pakkeinfrastrukturen og utvide funksjonaliteten til pakkebehandleren. Vi planlegger også å utvide settet med biblioteker, for eksempel jobber vi for tiden med en wrapper for Docker API. Vi administrerer docker-containere ved hjelp av 1C-skript, og utviklinger om dette emnet vil sannsynligvis også bli publisert når de blir tatt i tankene. Dette vil resultere i en forenklet DSL for containermanipulering fra 1script.

teknisk sammendrag

  • Programmeringsspråk - C#, .NET v4.0/Mono 3.1x
  • Utviklingsmiljø - VS 2013-2015
  • Navnet på tolken er oscript.exe (kjør for kjøring - oscript )
  • Skriptfiltypen er .os
  • Pakkefiltypen er .ospx
  • Kodeytelse - i de fleste målinger opptil 4 ganger raskere enn den originale 1C-plattformen. I hvert fall ikke tregere enn henne.
  • Motorlager - github.com/EvilBeaver/OneScript
  • Bibliotekslager - github.com/oscript-library
Jeg skriver ikke prosjektets nettside, for det første slik at det ikke høres ut som PR, og for det andre tåler det rett og slett ikke habraeffekten. Hvis du har ditt eget prosjekt som du ønsker å bringe frem i lyset, så la meg gi deg et par tips basert på personlig erfaring.
  • Våg! Hvis du holder prosjektet ditt på bordet og ikke forteller noen om det, vil ingen få vite om det. Start med en artikkel om Habr. En artikkel vil ikke være nok. Nevn prosjektet ditt i fora dedikert til fagområdet for prosjektet ditt, gi eksempler på vellykket søknad.
  • Vær forberedt på at det er mange forslag fra folk, og mye færre reelle forpliktelser. Tilnærmingen i stil med "Det er åpen kildekode, du trenger det, du gjør det," vil dessverre ikke fungere.
  • Tenk fremover for å løse «vekstproblemet». Vekst er vanligvis eksplosiv og det er ganske vanskelig å takle en kraftig økt pool av oppgaver.
Legg til merkelapper

bakgrunn

Under implementeringen av ett prosjekt ble det nødvendig å kjøre javascript (heretter referert til som JS) kode under kontroll av HTML Document Field-objektet, med resultatet oppnådd i 1C. Eksemplene gitt i artiklene som ble funnet virket ikke særlig praktiske å bruke (en rent personlig mening). Det ble besluttet å prøve å finne en annen, enklere løsning, det ble ikke satt av mer enn 1 dag til søket.

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

Utfør skriptet

DIV.klikk();

TA-DAH. alt fungerer

Prosedyre ExecuteScript(TextScript) DIV = Elements.doc.Document.getElementById("TEST"); DIV.setAttribute("onclick", TextScript); DIV.klikk(); Sluttprosedyre

Oppdatering per 08/02/2016

En annen måte å ringe JS på ble foreslått i kommentarene (takk), hvis du har muligheten til å endre HTML-koden til dokumentet, kan du skrive en funksjon i den og deretter kalle den. sende JS-koden til den.

og deretter i 1C:

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

Returnerer et JS-resultat i 1C

For å overføre resultatet av skriptet til 1C fra FieldHTMLDocument-objektet, bruker vi en hendelse. La oss binde en OnClick-hendelse til HTMLDocument-feltet som mottar 3 parametere som input:

  1. Elementet der hendelsen skjedde (feltet til selve HTML-dokumentet)
  2. hendelsesobjekt
  3. Tegn på implementeringen av standard oppførsel

For å utløse en hendelse ved klikk, må du utføre følgende js-kode

Varevt = document.createEventObject(); // opprett et tomt hendelsesobjekt evt.propertyName = "funksjon1"; // Jeg foreslår å sette navnet på resultatet i egenskapsnavn prop (noe som en type, eller navnet på funksjonen som dataene ble mottatt fra) evt.data = "156"; //vi vil sende resultatdataene til datapropen document.body.fireEvent("onclick", evt); // utfør hendelsen på clickHtmlDocumentField

Etter å ha utført denne js-koden i prosedyren, når den andre parameteren klikkes, vil hendelsesobjektet vi opprettet komme. Som er ganske enkel å håndtere.

Eksempel på svaranalyse.

&OnClient // få navnet og resultatet av hendelsen Prosedyre DocOnClick(Element, EventData, StandardProcessing) OperationName = EventData.Event.propertyName; OperationData = EventData.Event.data; Hvis OperationName = "" Så //ikke vår hendelse Returner; Slutt om; If OperationName = "Function1" Then // prosessresultat ElseIf OperationName = "function2" Da // prosessresultat //...... EndIf; Sluttprosedyre

Denne metoden fjerner bruken av ventehåndterere, og gir en praktisk hendelsesidentifikator. Ved hjelp av identifikatoren vet vi nøyaktig hvilke data vi mottok og hvordan vi analyserer dem.

Tillegg fra 26.03.2016

Og også på dette stedet oppstod det misforståelser (feilen gjengis bare på plattformen 8.3.5.1570, men for å forhindre disse situasjonene i fremtiden, vil jeg gi en løsning) Selve grunnen - ved relansering av skjemaet med HTML-feltet til dokumentet på tidspunktet for prosedyrekallet, når du klikker på HTML-feltet, ble plattformkallet sittende fast og brakte ned hele COM-objektet (Et unntak skjedde (htmlfil): Udefinert feil). Løsningen var å deaktivere standardutførelsen av klikkhendelsen, og deaktivere boblemodusen for hendelsen. Hvordan du gjør dette, se nedenfor.

// deaktiver hendelsesbobling

Evt.cancelBubble = sant;

// deaktiver standard oppførsel

Evt.returnValue = usann;

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

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

Konklusjon.

Ved å kombinere disse metodene kan du ganske enkelt kjøre js-koden du trenger og motta data i 1C for videre behandling.

Implementeringseksempel i

Operatør : "Hei! Jeg heter Maria, selskapet "Windows-alt-på-verden.""

Klient : "Jeg trenger ingenting"

Operatør : "Men vi har de beste forholdene og..."

Klient (avbryter):"Maria, farvel!"

Operatør (snakker):"Vi har operert i markedet siden 2003 og siden den gang..."

Klient (Legg på telefonen):...

Maria slår neste nummer.

Alle kjenner den irriterende historien. Etter en slik dialog vil klienten få en negativ ettersmak, og OknaVsemNaSvete mistet dumt dyrebar kontakt. Selv om operatøren Maria vil motta lønn i slutten av måneden, så i denne situasjonen er ikke alle tapere.

Det mest støtende i denne situasjonen er at Maria virkelig prøvde, hun tenker oppriktig at «de trenger bare ikke klienter – de tar det ikke» og generelt «men hvordan kan jeg få ham til å ikke legge på?». Det faktum at noen vurderer KPI, Mary til lyspæren - ZP vil bli gitt uansett. På slutten av måneden vil lederen Aleksey studere 1001 registreringer av samtalen til operatørene hans (det tar minst 2-3 dager i måneden), skjelle ut avdelingene hans - han vil komme seg som svar på unnskyldningene som "igjen, samtalen basen var ikke målrettet ...". Alexei sukker trist og deler ut lønn til alle. Den neste måneden starter.

Teamet har utviklet seg i vennskap, mye arbeid er gjort, men det kan ikke fortsette slik. (Med)

Hva er dårlig i dette tilfellet (men løst med lite blod):

Tilnærmingen til operatører på jobb

  1. De ringer automatisk. Men uten et klart mål er det vanskelig å bygge en god dialog;
  2. De vet ikke hvordan de skal svare på klientens innvending eller svare uten hell;
  3. De legger på så snart de begynner å tvile på suksessen til samtalen;
  4. Jeg er sikker på at han vil motta lønn for prosessen - derfor gjør han alt sakte, med en pause for hvile, uten nødvendig motivasjon;
  5. Alle slakter de eksisterende reglene for å ringe kunder, klager over kompleksiteten og volumet av instruksjoner;

Lederstilling


Alle disse problemene er løst i undersystemet "Arranger en samtale!"

(den kan "innebygges" i din 1C, du kan bruke den separat).

"Sett opp en samtale!" kan:

  • Komponer skript - talemoduler for operatører
  • Tilordne skripttilgjengelighet til forskjellige grupper og grener
  • Samle statistikk om bruk av scriptblokker, oppnåelse av mål og feil, måle konvertering
  • Last ned anropsbasen fra Excel eller bruk numrene til kunder som har blitt oppringt tidligere
  • Vis statistikktavle for operatører
  • Lag bestillinger, krav under passasjen av skriptet, fyll inn eventuelle objekter i databasen din.
  • Begrens "klikk" til skriptsetninger vilkårlig
  • Arbeid med sip-telefoni
  • Arbeid med e-post
  • Gjør e-poster, nettstedsforespørsler til potensielle kunder og kundebehov ved å laste dem opp til systemet
  • Administrer kunder, kundeemner og avtaler

"Arranger en samtale!" lar deg bygge en lukket syklus av interaksjoner med klienten.

Stadiene av slikt arbeid er tilpasset din smak. For eksempel slik:

Alternativ nummer 1

  1. Systemet mottok en ny potensiell klient
  2. Operatøren ringte i henhold til algoritmen, avklarte behovet for tjenesten
  3. Målkontakten ble overført til salgsavdelingen
  4. Lederen bygger en relasjon med klienten
  5. Manager gjør en avtale

Alternativ nummer 2

Eller slik:

  1. Operatøren mottar et innkommende anrop
  2. Når du ringer, lanseres et scenario for å bestemme behovene til klienten, det nødvendige selskapet bestemmes
  3. I prosessen med arbeidet utarbeider operatøren en kundeordre, spesifiserer leveringsdatoen
  4. Bestillingen overføres til forsyningsavdelingen for montering

Alternativ nummer 3

Vel, eller et annet alternativ:

  1. En ny applikasjon ble laget på nettstedet, siden omdirigerer brevet til databasen på denne applikasjonen
  2. Basen analyserer brevet, "henter" motpartsdataene, meldingsteksten fra den, skaper et behov og en oppgave
  3. En gratis operatør tar opp oppgaven, ringer klienten, løser problemet
  4. Hvis klienten likte alt, opprettes enten en ordre, eller klienten overføres til ledere

Alternativ nummer 4

Kom med noen av alternativene dine!

I slutten av måneden mottar lederen rapporter:

  1. I følge utvidet statistikk over kundebehov - hvor mange var, hvor mange var kvalifisert, hvor mange ble nektet - etter hvilken som helst status
  2. Om arbeidet med samtalemanus og operatører
  3. I henhold til kontakter med klienter - hva de snakket om, hvor mange ganger. Hvor mange ringte, hvor mange bokstaver ble skrevet.

Hvordan det fungerer

I "Sett samtalen!" innebygde delsystemer (klikkbare):

Skript

Med skript mener vi noen relaterte handlinger i henhold til algoritmen. For eksempel,

  1. Utgående samtale- for å selge et produkt eller en tjeneste, invitere til en kampanje, fylle ut et spørreskjema
  2. Innkommende anrop- For å behandle bestillingen riktig, ikke glem rabatten og leveringen
  3. Fyller ut et dokument- standardskjema i form av assistent

Hvordan å bruke

  • Lag operatørsamtalemønstre i konstruktøren
  • Fullstendig tilpassbarhet - vis alle felt for å fylle ut anropsskriptet (spørreskjemadata, for å legge inn en ordre, etc.)
  • Legg ut linker til interne kunnskapsbaseartikler slik at operatøren kan svare på eventuelle tekniske spørsmål
  • Lag bestillinger under samtaleskriptet, samle inn krav, send brev og endre statusen til potensielle kunder
  • Gi stjerneledere mer frihet i samtalemanuset. Slike ansatte liker ikke restriksjoner, ytelsen deres er høyere når samtalen ikke er 100 % begrenset - lag et samtaleskript for slike ledere, som vil bli brukt som et spørreskjema, og overgangen mellom blokkene vil være gratis. Du vil få statistikk for disse stjernene også, og de vil ikke føle seg "klemt" av samtalemanuset
  • Sjekk operatørenes arbeid i henhold til anropsscenarier og registrer resultatene av sjekken i et spesielt dokument
  • Bli kvitt hacky samtaler ved hjelp av konkurrerende skriptutførelsesinnstillinger
  • Send tilbudsbrev under samtaleskriptprosessen, lag klager fra misfornøyde kunder underveis

Skript er hovedundersystemet til "Arranger en samtale!". Nedenfor er litt mer om innstillingene ved hjelp av et eksempel.

Eksempel

For eksempel kan det være en slik oppgave for operatører: "Du må ringe listen over numre, luke ut ikke-målrettede kontakter og overføre kundeemner til ledere." For å gjøre dette vil vi lage et script i systemet, laste inn potensielle avtaler fra xls, operatører vil gå gjennom avtaler i henhold til scriptet, luke ut ikke-målrettede og målrettede vil bli overført til ledere for arbeid. La oss lage et skript først.

Lag et nytt skript

  1. Vi lager et flytskjema over dette skriptet - hva operatøren vil si, hvilke verdier å velge og hva systemet vil tilby ham neste gang
  2. Vi setter flere skriptfelt - for eksempel på hver blokk av skriptet skal det fulle navnet på klienten og hans firma være synlig
  3. Angi raske overganger fra hver blokk. I hver blokk vil knapper for raske overganger vises (operatøren kan når som helst bli spurt "Hva slags selskap er du?" - i dette tilfellet klikker operatøren på hurtigovergangen, leser blokkteksten om selskapet og går tilbake til forrige blokk)
  4. Vi setter opp scriptet - vil scriptet bli loggført, vil skjemaet være synlig, er det nødvendig å bruke SIP, hvilke oppgaver som må utføres under scriptet osv.
  5. Vi tildeler tilgangsrettigheter til det - hvem kan se dette skriptet, opprette et nytt anrop ved å bruke det, etc.

I blokkskjemaet til scriptet angir vi hva operatøren skal si, hvilke svarmuligheter klienten har, og hvilke felt operatøren må fylle ut på dette stadiet.

  1. Teksten til operatørens tale. Du kan sette inn ytterligere detaljer fra tidligere skriptblokker eller vanlige felt. Kan formatere tekst
  2. Tekstparametere settes her - skjermbildet viser at [Navn] vil fylles ut fra firmanavnet
  3. Vi setter om målet er oppnådd dersom denne blokken er nådd, hvilket stadium blokken tilhører ("etablering av kontakt", "å nå sekretær" etc.) og hvilket resultat som er oppnådd dersom denne blokken er nådd

Skriptblokken kan ha flere semantiske betydninger:

  • Du kan plassere alle felt på den. For eksempel må operatøren velge hvordan varene skal leveres til klienten - henting, bud i byen eller intercity. Før operatøren fyller ut dette feltet, vil ikke skriptet gå lenger. Vel, i ordningen kan du indikere at hvis du fylte ut intercity, må du vise en blokk, hvis med bud, så en annen.
  • De opprettede blokkattributtene kan fylles med noe. For eksempel, i den første blokken av manuset, ble vi fortalt navnet på regissøren, og i den siste blokken kan vi få denne informasjonen og vise den på skjemaet til operatøren
  • Når du beveger deg lenger fra blokken, kan du utføre noen handlinger. For eksempel, hvis klienten sa at han ikke er interessert i oss i det hele tatt og det er ingen vits i å "slåss", så vil vi sette statusen "Ikke-målrettet" i behovet. Hvis vi har kommet til slutten av scriptet og er klare til å overføre klienten til neste avdeling, så setter vi selskapets status til "Lead" i stedet for "New". Du kan endre alle felt, ikke bare de som er oppført ovenfor
  • For blokken kan du angi svaralternativer for kunder - "Ja", "Nei", "Ring tilbake senere", "Vi har anbud", "Ikke interessert" osv. Avhengig av alternativene kan du forgrene skriptskjemaet
  • Mens skriptblokken kjører, kan du lage noen andre elementer. For eksempel gikk klienten med på å oppgi e-postadressen sin - så sender vi ham umiddelbart et brev fra KP. Vi angir ganske enkelt at et brev skal opprettes, fylles ut i henhold til malen og sendes til kundens adresse.

Til slutt ender vi opp med noe slikt:

Operatøren vil bli presentert med skriptbehandlingsskjemaet i menneskelig form " assistent". For eksempel kan en av kretsblokkene se slik ut:

  1. Teksten skrev vi til operatøren
  2. Detaljer som han trenger for å fylle ut i dette trinnet
  3. Kundesvarsalternativer
  4. Manusets formål og oppgaver
  5. Tilgjengelig på hver blokk overganger til andre blokker
  6. Vanlige skriptfelt
  7. Logg over valgte svar

Etter at skriptskjemaet er opprettet, kan operatøren allerede begynne å ringe - på operatørens arbeidsplass (hvis scriptet har rett til å opprette), kan du klikke på "Opprett"-knappen, velge ønsket script og for eksempel ta neste telefonnummer fra xls-tabellen, arbeid med det:

På dette stadiet kan operatører allerede jobbe i henhold til skriptet, men det er ulempen med å ta kontakter fra bordet - dette fører til en rekke typiske feil.

Last ned kontakter fra et Excel-regneark for generelle oppringninger

Vi vil ikke bare laste opp selskaper med kontaktinformasjonen deres, men "potensielle avtaler" (også kalt "Leads") i statusen "Kvalifisert". La oss sette opp skriptet på en slik måte at det vil endre statusen til potensielle kunder etter hvert – fra «Rejected» til «Appointed». Derfor vil vi se på trakten for denne anropsbasen.

La oss lage en innstilling for datalasting:

  1. Filen som vi samler inn data fra
  2. Dataene som skal lastes inn i databasen
  3. Hvordan vil dataene bli lastet?

I innstillingene kan du spesifisere fyllingen av alle detaljer om de opprettede objektene. Vi vil opprette en potensiell avtale fra selskapet i statusen "Kvalifisering" og "skriptutførelse" - et objekt som er klart for operatøren til å jobbe i henhold til skriptet, fyll ut prosjektet, slik at vi senere kan filtrere resultatene av samtalen til denne databasen av den:

Vi fyller ikke ut operatøren slik at alle kan se de opprettede elementene og ta dem med i arbeid. Lagede skript vil være tilgjengelige gjennom operatørens arbeidsplass:

Operatører trykker på knappen " Neste" - systemet velger neste skript i rekkefølge og begynner å behandle det. Dermed:

  • Operatører har alltid «up-to-date informasjon» foran øynene – det er ingen dupliserte samtaler
  • Klienter som ba om å ringe tilbake etter en tid, blir satt på pause - slike skript vises i samme vindu med datoen for neste kontakt.
  • Operatører ser statistikken til kollegaer på samtaler - dette motiverer seg selv til å jobbe:

Operatører ser statistikken deres mer detaljert:

Vel, hvis operatørene er utspekulerte, kaster komplekse samtaler på forhånd, eller prøver å "reservere" så mange skript som mulig, kan du begrense utstedelsen av skript ved å bruke konkurrerende regler. Du kan angi følgende begrensninger:

  • Ikke mer enn X skript på Y minutter
  • Etter å ha utført skriptet, vent X minutter
  • Du kan ikke la mer enn X skript ventes

På dette stadiet vil vi ha en velutviklet leadbase - ikke-kjerne-leads siles ut, og den aktuelle statusen tildeles kjernene. Arbeidet til operatørene er ferdig her, nå er salgssjefene inkludert.

Tilknytning til prosessledere.

Lederen for salgsavdelingen går inn i katalogen over selskaper, velger bare de som er kvalifisert ved å ringe og utnevner ansvarlige ledere i transaksjoner:

Lederen legger inn behovet for klienten som er tildelt ham og begynner å jobbe i henhold til klientens behov. Alle interaksjoner registreres i behovskortet:

Analyse av resultater

Lederen ser både statistikken til hver operatør og konverteringen av hvert skript:

I henhold til statusen til behandlede behov kan du bygge en trakt:

Kunnskapsbase

I kunnskapsbasen kan du plassere artikler kategorisert. For hver kategori kan du konfigurere tilgang for å se og opprette individuelle brukere. En lenke til en artikkel kan plasseres i skriptbehandleren.

Hvordan å bruke

  • Lag materiell om produktene dine og plasser lenker til dem i samtaleskriptet - så vil operatørene dine kunne svare på tekniske spørsmål fra kunder
  • Plasser beskrivelser av bruken av samtalemanuset i artikler og gi det til nyansatte for gjennomgang

CRM

Et lite system for å jobbe med kunderelasjoner. Den inkluderer en katalog over selskaper (den inneholder en lenke til motparten hvis "Arranger en samtale!" må lastes inn i en fungerende konfigurasjon), kontakter til disse selskapene og potensielle avtaler. Ledere jobber med potensielle transaksjoner til motparter, og poster dem i henhold til forskjellige statuser. Salg opprettes for fullførte avtaler og betaling kontrolleres. I slutten av måneden evaluerer lederen hvor mange kontakter som ble tatt, hvilken godtgjørelse som skyldes lead-generatorer, og hvilke indikatorer hver av lederne har.

Hvordan å bruke

  • Hold styr på statistikk og analyse av kundetransaksjoner
  • Gjenspeil alle alternativer for å jobbe med klienter
  • Last opp nye kundeemner for å ringe
  • Håndtere "glemte" og "tapte" kunder
  • Kontroller ytelsen til tjenestene

Hvert selskap kan inneholde unike detaljer etter type aktivitet:

For hvert selskap (og potensiell avtale) vises historikken for interaksjoner:

Alle kommende interaksjoner vises i "Feed", enhver leder har rask tilgang til dem når som helst. Feeden viser også kommentarer sendt til deg - for eksempel legger en logistikker igjen en kommentar "Når vi leverer" i en kundes forespørsel, og den ansvarlige for leveransen ser dette i feeden sin.

Lederen kan evaluere arbeidet til sine underordnede i forhold til antall kontakter med klienter. Hvor mange ganger som ringte, skrev brev, kommuniserte i messenger, hva slags kundeemner ble interaksjon med.

E-postklient

Delsystemet gir ikke bare sending og mottak av post. Det er noe som heter et postfilter, det hjelper å finne ut hva som må gjøres med et bestemt brev. Du har for eksempel et tilbakemeldingsskjema på nettstedet ditt, så snart brukeren fyller det ut, vil en e-post med teksten til klagen bli sendt til e-postadressen din. Filtrer i "Arranger en samtale!" kan konfigureres på denne måten - "hvis brevet kom fra adressen [e-postbeskyttet], så må du få det fulle navnet, kundens behov fra teksten i brevet og opprette en ny potensiell avtale basert på disse dataene. "Dermed kan du spesifisere regelen om at bokstaven faller inn under filteret og filteret handlinger for dette brevet.

For dette tjener de:

  • Detaljer om brevet - tilleggsfelt i brevet, for eksempel "Navn", "Leveringsadresse", "Telefon", "Meldingstekst"
  • Fylle ut detaljene fra brevet - reglene som systemet vil "få" informasjon fra teksten til brevet til detaljene
  • Filterhandlinger – hvilke nye e-postobjekter som må opprettes og hvordan de fylles ut

Hvordan å bruke:

  • Sett opp automatisk innsamling av applikasjoner fra nettstedet og tilordning av samtaleansvarlige i henhold til samtalescenariet for disse potensielle kundene
  • Konverter produktforespørsler (de kommer for eksempel til en spesifikk e-post) til et "Kundeforespørsel"-dokument, følg dokumentet i riktig retning
  • Kontroller arbeidet til ledere med klienter via post direkte fra databasen

Dokumentregnskap

Lar deg fikse dokumenter i systemet etter deres typer, begrense tilgangsrettighetene til dem. For eksempel kan du lage dokumenttypen "Kvalitetskrav" og gi tilgang til den kun til "QC"-avdelingen. I dette dokumentet vil du ha et par nye detaljer, som "Kravtekst", "Søknadsdato", Resultat" og andre. Eller du kan samle "Jobbsøknader" fra klienter, legge ved filer til dem og sende dem gjennom statuser (" Ikke startet", "Pågår", "Beregnet", "Avtalt", "Avvist").

Hvordan å bruke

  • I innstillingene for postfiltre kan du opprette applikasjoner og forespørsler om produkter direkte fra kundens brev
  • I forbindelse med samtalescenarier kan du generere dokumenter direkte under samtalescenarioet (for eksempel er en klient misfornøyd med kvaliteten på tjenestene - vi oppretter et "krav", som deretter vil bli behandlet av QCD-avdelingen)

Det ser slik ut:

  1. Dokumentstatuser
  2. Dokumenttype som bestemmer tilstedeværelsen av detaljer i dokumentet
  3. Ytterligere dokumentdetaljer

En virtuell maskin som kjører skript i 1C:Enterprise.

Dette er med andre ord muligheten til å skrive programmer i 1C uten å bruke 1C:Enterprise-plattformen.

Og dette gjør at vi etter hvert kan ta ferdige kodebiter skrevet i konfiguratoren og overføre dem til et OneScript-program med minimal tilpasning.

Og selv om, ifølge utviklerne, dette ikke er hovedmålet med prosjektet, men jeg ser en interesse for å koble fra et OneScript-program til 1C-databasen gjennom en ekstern tilkobling og kjøre noe nyttig kode.

Du spør - hvorfor er dette i det hele tatt nødvendig? Hvorfor ikke skrive den samme koden i behandlingen og kjøre den gjennom 1-er på standard måte?

Men vi snakker om automatisering, og det er grunnleggende problemer her:

  • det er ingen måte å garantere at basen vil starte og utføre koden til en ekstern behandling i den (den som har støtt på dette i praksis vet at for mye kan gå galt, startende med det faktum at behandlingen rett og slett ikke når utførelse pga. til et modalt vindu)
  • det er ingen enkel måte å generere slik prosessering programmatisk, men vi kan trenge dette når det gjelder å utføre nyttig kode over en gruppe baser
  • det er ingen enkel måte å logge utførelsen av denne behandlingen på

Alle disse problemene løses av OneScript.

Hvorfor skrive og kjøre disse skriptene i oppdateringsprogrammet?

Fordi oppdateringsprogrammet tar på seg en rekke vanskelige ting for å forenkle å skrive slike skript når det gjelder interaksjon med databaser.

Nemlig.

Liste over grunnlag for behandling

Rett i oppdateringsprogrammet velger vi hvor mange databaser vi trenger for å kjøre skriptet vi skrev:

Passerer basisparametere

Når du kjører skriptet, sender oppdateringsprogrammet selv de nødvendige parameterne til det med informasjon om gjeldende database:

Vi kan bruke alle disse parameterne i skriptet vårt, noe som gjør det universelt for kjøring på et hvilket som helst antall utvalgte baser.

Vi kan finne eksempler på slike skript i listen over oppdateringsmaler:

Database forhåndsarkivering

Om nødvendig vil oppdateringsprogrammet sørge for at det opprettes en sikkerhetskopi før skriptet kjøres:

Denne sikkerhetskopien vil være i samsvar med det generelle arkiveringssystemet, det vil si at den også kan "innstilles" i de avanserte innstillingene til oppdateringsprogrammet. En slik kopi vil alltid være merket "før farlig operasjon".

Lås, lås opp basen

Om nødvendig vil oppdateringsprogrammet utføre en fullstendig databaselås før skriptet kjøres og låse opp etter:

Og dette er en av de viktigste "funksjonene" til oppdateringsprogrammet - tross alt er for eksempel riktig utførelse av blokkering av serverdatabasen i det generelle tilfellet en ganske ikke-triviell oppgave.

Det er nødvendig å "løse" gjeldende brukertilkoblinger, administrative tilkoblinger, bakgrunnsoppgaver. Og alt dette gjennom kommunikasjon direkte med 1s klyngen.

Lagrer rapporter

Oppdateringsprogrammet lagrer utførelseshistorikken til slike skript i rapportbehandlingen.

Som i generelle termer:

Så i detalj:

E-postvarsel

Hvis du har konfigurert e-postvarsler (alle eller bare ved feil)...

Da vil informasjon om utførelse av skript (inkludert detaljerte rapporter) komme til deg på samme måte som informasjon om utførelse av andre operasjoner fra oppdateringsprogrammet:

Kjør et skript etter en tidsplan

Skyovervåking

Når vi lagrer skriptet, har vi også muligheten til å overvåke arbeidet i skyen - en helt fantastisk mulighet etter min mening. Det handler om skyovervåking.

Multi-threaded script kjøring

Hvordan man kjører skriptet parallelt for flere databaser er beskrevet i detalj.

Hva annet er nyttig å lære før man skriver manus?

Vel, selvfølgelig, selve 1C-språket. Hvor uten ham...

Først av alt er det denne 1C språkguiden med eksempler:.

Det er også verdt å gå over forskjellene mellom OneScript og standard 1C-språket. Det er få av dem (lenke).

Hvordan kommer jeg på mine egne manus?

For inspirasjon anbefaler jeg deg først å analysere og forstå skriptene fra oppdateringsmalene. Dette vil gi deg mye.

Og hvis du trenger en idé for å skrive et skript som vil være nyttig for hundrevis av andre brukere, så ber jeg deg - skriv til meg om det på noen måte som er praktisk for deg. Jeg har veldig mange ideer, men det er ikke nok tid og muligheter.

For å gjøre dette startet jeg et spesielt prosjekt på github , hvor jeg samler inn nyttige skript fra oppdateringsbrukere slik at så mange som mulig kan bruke dem i arbeidet sitt.

Vil du sende meg manuset ditt? Jeg spør deg om å .

Vennlig hilsen, Vladimir Milkin(lærer og utvikler).