Jaki jest skrypt dla 1C. "Zadzwoń!" pozwala zbudować zamknięty cykl interakcji z klientem

W tym artykule postaram się podać kilka wskazówek dotyczących konfiguracji aktywacji skryptów na stronach internetowych korzystających z 1C.

Dlaczego może to być potrzebne? W moim przykładzie musiałem uruchomić skrypt php, aby aktywować pobieranie w witrynie, której cms to 1C-Bitrix. Te. plik jest pobierany z 1C i sygnalizuje witrynie, aby wybrała plik. Zapewnia to wysoką efektywność wymiany z serwisem.

Tak naprawdę nie ma w tym procesie nic trudnego, jednak ze względu na specyfikę tej procedury programista może mieć pewne problemy z tą czynnością.

Opis zadania:

Po pobraniu pliku danych z 1C konieczne było jak najszybsze przesłanie pliku do bazy danych serwisu. W tym celu programista tworzący witrynę stworzył skrypt, który wykonał dwie akcje: sprawdził autoryzację i aktywował wymianę po stronie witryny. Sam skrypt php wyglądał następująco: „http:///1c_prices_import_run.php”.

Przyjrzyjmy się, jak ten skrypt został uruchomiony.

POBIERZ żądanie od 1C

Pierwszym krokiem jest utworzenie obiektu „Połączenie HTTP”, za pomocą którego przeprowadzamy autoryzację:

Uzyskaj 267 lekcji wideo na 1C za darmo:

HTTP = nowe połączenie HTTP(" /1c_prices_import_run.php

Podaję adres skryptu php, hasło i login do parametrów. To wystarczy, jeśli nie masz innych trudnych warunków, takich jak bezpieczna autoryzacja i serwer proxy.

Moim drugim krokiem było sprawdzenie połączenia; jeśli autoryzacja przebiegła pomyślnie, ten skrypt zwrócił mi słowo „sukces”:

HTTP.Get(" http:///1c_prices_import_run.php?mode=checkauth", NazwaPliku Odpowiedzi); // sprawdzenie autoryzacji

W parametrach metody Get (analogicznie do GET) podajemy parametr „ ?tryb=sprawdzanie", co pokazuje, że jest to tylko test ping. Drugi parametr „ResponseFileName” to plik, w którym zostanie zapisana odpowiedź serwera.

HTTP.Get(" http:///1c_prices_import_run.php?mode=query", NazwaPliku Żądania);

To wszystko. Wszystko jest dość proste i działa idealnie po stronie 1C.

Cóż, na koniec pokażę Ci cały kod:

RequestFileName= GetTemporaryFileName();

HTTP = nowe połączenie HTTP(" http:///1c_prices_import_run.php", Ustawienia udostępniania danych. Nazwa użytkownika udostępniania HTTP, Ustawienia udostępniania danych. Hasło udostępniania HTTP,); //połączenie

Wyjątek

Zakończ próbę;

HTTP.Get( http:///1c_prices_import_run.php?mode=checkauth", nazwa_pliku_żądania); // sprawdzenie autoryzacji

Wyjątek

Zakończ próbę;

ResponseFile = Nowy plik (ResponseFileName);

Jeśli ResponseFile.Exists() to

Teza, że ​​open source tworzą entuzjastyczni maniacy, w naszych czasach nieco straciła na aktualności. Tak jednak narodziła się ideologia open source. Fajne programy pisane nocą, przez brodatych (i nie tak brodatych) dziwaków, bezinteresownie, po prostu po to, żeby uczynić świat lepszym miejscem - zmieniły świat tworzenia oprogramowania.

Każdy programista w tajemnicy marzy o stworzeniu czegoś dużego i jasnego, aby wszystkim się podobało. Jeśli powiesz mi, że nie jesteś jedną z tych osób, że lubisz jedynie zamykać bilety w działającym bug trackerze i nie marzysz o wypuszczeniu swojego projektu w wielki świat, to Ci nie uwierzę. Albo doradzę Ci zmianę zawodu. Jestem przekonany, że programista jest artystą i ważne jest, aby artysta zrobił coś swojego, może tylko „na stole” – ale żeby to zrobił.

Któregoś dnia w mojej głowie pojawił się pomysł na projekt. Pomysł był czysto badawczy i nie miałem zamiaru robić z niego „produktu”. Poza tym nigdy wcześniej nie prowadziłem projektów typu open access i bardzo chciałem spróbować, jak to się faktycznie dzieje. To, co z tego wyszło, jest pod nacięciem.

Już na samym początku życia projektu pisałem o nim na Habré. Potem były pierwsze kroki, kod był prymitywny, ale zadziałał. Chciałem, żeby projekt wzbudził zainteresowanie innych autorów, bo oczywiście sam nie byłbym w stanie go zrealizować i w zasadzie go porzuciłem. W zasadzie stałoby się to, gdybym nie otrzymał pierwszego żądania ściągnięcia od nieznajomego. Ale przede wszystkim…

O czym to jest? Wykonałem własną implementację maszyny stosowej wykonującej skrypty w języku 1C: Enterprise. Lub, mówiąc prościej, otwarty interpreter języka 1C i otwarta implementacja niektórych standardowych klas 1C. Jednocześnie projekt miał jasny cel - zapewnić użytkownikom 1C narzędzie do automatyzacji skryptów, które byłoby łatwe do nauczenia. Projekt nazwano 1Script.

I tak projekt został opublikowany na Habré i na specjalistycznym portalu 1C infostart.ru. Czekam na informację zwrotną. Pierwszą odpowiedzią, jaką otrzymałem, była scena i serdecznie się roześmiałem. Temat na forum został wywołany „Tłumacz 1C na Habré. Zamknijmy to?” Na stronie jest mnóstwo życzliwych osób, bardzo się ucieszyłam :)

Potem pojawiły się mniej lub bardziej adekwatne pytania, na które pilnie odpowiadałem, po czym artykuły jak zwykle schodziły z pierwszych stron, a zainteresowanie projektem opadło. No cóż, takiego zakończenia się spodziewałem, trochę się zirytowałem, ale nie bardzo. Właściwie nie spodziewałem się jakiegoś specjalnego rezultatu. Pogadaliśmy i ok. Mijały dni, coś skończyłem, nawet opublikowałem kolejną wersję, ale nikt poza mną tego nie potrzebował. Skończył mi się bezpiecznik. Chociaż nie zawiodłem się, przestałem pisać nowy kod.

Drugi wiatr Około dwa miesiące po publikacji Siergiej Batanow (Serega, witaj! :) - wybitny facet w społeczności 1C - skontaktował się ze mną i zaoferował swoją pomoc w opracowaniu standardowej biblioteki. Była to „Tabela wartości” klasy 1C. Oczywiście, zgodziłem się. A kiedy zobaczyłem prawdziwy kod, który przysłał Siergiej, naprawdę byłem szczęśliwy jak dziecko. Często zdarza się w Internecie, gdy ktoś oferuje coś słownie, ale często nie dochodzi to do skutku. A oto prawdziwy kod na żywo, który działa, jest w pełni odpowiedni i można go wstawić do projektu!

Jednocześnie zadanie jest dość duże, sam byłbym zbyt leniwy, żeby to zrobić. A oto namacalny, naprawdę przydatny, wymierny wkład w cały projekt, mierzalny w liniach kodu! Krótko mówiąc, nie skłamię, jeśli powiem, że to Siergiej zadbał o to, abym nie porzucił projektu. To niesamowita inspiracja, aby uzyskać pomoc od nieznajomego. Tylko dlatego, że był zainteresowany tym, co zaczęłaś.

Stopniowo zacząłem otrzymywać opinie od osób, które wypróbowały silnik i pytać: „Gdzie jest ta funkcja?”, „Jak to zrobić?” Na wszystkie te pytania trzeba było odpowiedzieć, że to prototyp, a potem musiałem pilnie dodać te funkcje. Ale entuzjazm był nie do zniesienia: „Ludzie są zainteresowani i próbują z tego korzystać”, więc nowe funkcje zostały dodane dość szybko. Początkowo standardowa biblioteka nie miała nawet funkcji do pracy z plikami.

Coraz więcej Po pewnym czasie napisał do mnie Aleksander Kuntaszow z pytaniem dotyczącym integracji 1Script i projektu Snegopat (www.snegopat.ru). Dla tych, którzy nie wiedzą, jest to wyostrzacz dla 1C. Umożliwia tworzenie wtyczek skryptowych dla konfiguratora 1C i istnieje cała społeczność autorów takich wtyczek.
Wtyczki te zostały napisane w języku JavaScript i dlatego wymagały kwalifikacji wykraczających poza zakres standardowego programisty 1C. Z tego powodu rozwój ekosystemu wtyczek został ostatecznie utrudniony. Liczba osób chcących ulepszyć Konfigurator jest w przybliżeniu równa całkowitej liczbie użytkowników 1C, jednak konieczność nauki JavaScript zniechęca autorów potencjalnych arcydzieł.

Ja znowu byłem szalenie szczęśliwy z powodu zapotrzebowania na mój pomysł, błagałem autora o zestaw dystrybucyjny Snowpath i otrząsnąłem się z kurzu z mojej wiedzy o C++. Było dużo więcej kurzu niż wiedzy, ale twórczy zapał zrobił swoje i zagłębiłem się w MSDN.

Około miesiąc później w konfiguratorze 1C stało się możliwe pisanie wtyczek bezpośrednio w języku 1C, bez konieczności przełączania się do okna edytora JavaScript. Jednocześnie naprawiono pierwsze krytyczne błędy silnika i znacząco zmieniono architekturę wewnętrzną.
Po wielu latach pracy wyłącznie z 1C czerpałem odurzającą przyjemność z komunikacji z C++, COM, ATL i tym wszystkim. Cóż, a także z faktu, że zrobiłem coś pożytecznego, namacalnego dla społeczności 1C.

Pierwsze doświadczenia z użyciem bojowym Mniej więcej w tym samym czasie (nie pamiętam dokładnie) projektem zainteresował się Aleksiej Lustin () (Lech, Tobie też cześć!) - znana i szanowana osoba wśród pseudonimów 1C. Zbiegło się to z moimi poszukiwaniami nowej pracy. Szukałem ciekawych firm na rynku, a Aleksiej szukał specjalistów do projektu Continuos Integration/Continuos Delivery dla pracowników 1C. Wtedy Lesha widziała już mój projekt (i pseudonim) na Habré i już wiedziałem, że pewien zespół zaawansowanych użytkowników 1C w sieci robi ciekawe, niestandardowe rzeczy.

W tym momencie społeczność znała już takie rzeczy, jak testowanie jednostkowe, przechowywanie kodu 1C w git, BDD+ogórek dla 1C i tak dalej. Aleksiej wydał mi się najbardziej przystępnym z tych facetów, więc napisałem do niego list z pytaniem, czy ma ciekawą pracę. Tak więc wraz z moim projektem trafiłem do wesołego towarzystwa maniaków, którzy do tego czasu zgromadzili się w firmie, w której pracował Aleksiej.

W tamtym czasie silnik miał już minimalny zestaw możliwości wymaganych przez skrypt i mógł (tak mi się wydawało) w zasadzie służyć do skryptowania montażu i wdrażania baz danych 1C.

Po co w ogóle używać do tego nowego silnika? Właściwie istnieje milion języków skryptowych, ale nie jest jasne, po co nam kolejny, i to nieznany – zapyta czytelnik Habra – i nie będzie miał do końca racji. Strategicznie przyszły produkt był przeznaczony dla pracowników 1C i musiałby żyć od programisty do programisty, niezależnie od zmian personalnych w firmie. W społeczności nicków z 1C istnieje obiektywny problem: jest wśród nich wielu świetnych specjalistów, ale z jakiegoś powodu przeciętny nick z 1C nie chce uczyć się żadnego innego języka po tym, jak będzie dobry w 1C. Nie wiem, jaka jest przyczyna tego zjawiska, prawdopodobnie dlatego, że rządzi 1C (ironia)? Ludzie przychodzą do 1C, znając Javę, C/C++, mikrokontrolery, Delphi lub nie wiedząc nic, ale często pozostają w 1C i niechętnie wracają do swoich pierwotnych ekosystemów.
Już teraz przewiduję falę złości, ale proszę wysłuchajcie tezy do końca. Istnieją jednak wyjątki od każdej reguły, jednak planując system, który powinien przetrwać kilka pokoleń programistów (oczywiście nie biologiczne, ale pokolenia ludzkie), wtedy najprawdopodobniej znajdziesz specjalistę, który może go opracować, jeśli jest napisany w 1C . Jeśli jest to Python (lub wstaw swój ulubiony język), będziesz musiał zatrudnić specjalistę od Pythona, który bardzo dobrze zna 1C. A kiedy zostanie wielkim szefem, będziesz musiał poszukać innego takiego jak on, z kompetencjami w obszarze 1C. A jeśli jest to od razu język 1C, wystarczy znaleźć pseudonim 1C, który dobrze zna 1C i to wystarczy.
Inaczej mówiąc, system będzie trwalszy i będzie mógł go rozwijać większa liczba specjalistów, jeśli będzie napisany w znanym im wszystkim języku.

W ten sposób stał się jasny zakres zastosowania 1Script: są to DevOps i podobne zadania na potrzeby projektów 1C.

Pierwsze wyboje i poprawny rozwój Pierwszy mniej więcej duży skrypt, który napisałem (wcześniej były to teksty nie dłuższe niż sto linijek) spowodował awarię silnika. Przy określonej kombinacji parametrów i łańcuchów wywołań kontrola została przeniesiona w nieznane miejsce w kodzie, a aplikacja uległa awarii. Musieliśmy niemal całkowicie przepisać implementację stosu wywołań i obsługi wyjątków. Było to wyzwanie w stylu „Och, jesteś taki! Cóż, teraz cię naprawię!” Zapał bitwy pozwolił nam w ciągu jednego dnia przepisać niezbędne moduły i oprócz tego zidentyfikować jeszcze kilka błędów. Kod zaczął działać stabilnie. Wydałem nowe wydanie. Po drodze, ponieważ teraz pracuję nad Continuous Integration, zdałem sobie sprawę, że projekt wymagał także serwera kompilacji i automatyzacji wydań. Ponadto do projektu dołączył , znany wśród nicków 1C jako luminarz i guru testowania 1C. Zrobił dla mnie zestaw narzędzi do testowania silnika w oparciu o jego framework xUnitFor1C. W ten sposób otrzymałem behawioralne testy akceptacji, również napisane w języku 1C. Zainstalowałem TeamCity na moim serwerze domowym i skonfigurowałem nocne kompilacje z uruchomionymi testami. Po drodze byłem pełen entuzjazmu – projekt żyje i zdobywa nowych współpracowników. To było szalenie inspirujące.

W ciągu zaledwie trzech lub czterech miesięcy biblioteka klas silnika w końcu pozyskała wszystko, co niezbędne do większości zadań skryptowych: pojawiły się funkcje sieciowe, praca z archiwami, XML itp. Nasz projekt CI dla 1C został pomyślnie uruchomiony.

Mniej więcej w tym samym czasie, jeszcze raz dzięki, do projektu zaczęli przychodzić nowi zainteresowani użytkownicy. Prosili o funkcje, znajdowali błędy i żądali nowych wydań.
Przepływ funkcji, przydział kodu biblioteki w połączeniu z potrzebą prostego harmonogramu wydań doprowadziły mnie do tak interesującej rzeczy, jak problem wzrostu. Ale o niej więcej nieco później.

W listopadzie 2014 roku zostałem zaproszony do wystąpienia na prestiżowej konferencji 1C Infostart Event w St. Petersburgu. Oczywiście się zgodziłem i jako temat swojego wystąpienia wziąłem 1Script. Temat został zaakceptowany, co dla mnie oznaczało po pierwsze, że projekt jest w miarę znany (czyli słuchacze pewnie przyjdą, bo przynajmniej coś o nim słyszeli), a po drugie liczyłem na przyciągnięcie współpracowników, bo jest prawie nie ma już wystarczająco dużo czasu na rozwój silnika.
Specjalnie na konferencję przygotowałem nawet specjalną zabawę – tryb CGI, w którym skrypty można było uruchamiać pod kontrolą serwera HTTP i generować dane wyjściowe HTTP. Strony internetowe w języku 1C nie są już koszmarem hostera, ale trudną rzeczywistością (tylko żartuję).
Wystąpienie na Infostart można uznać za pierwszą publiczną zapowiedź, w której 1Script nie mógł już wstydzić się miana produktu, narzędzia zdolnego do rozwiązywania konkretnych problemów. To już nie był eksperyment, ale produkt wojskowy. Choć nadal w fazie beta.

Problem rozwoju czy pułapki wsparcia projektowego Jak się okazuje, posiadanie w zarządzaniu poszukiwanego projektu, nawet małego, niesie ze sobą znaczne obciążenie kosztami ogólnymi. Na początek jest to strumień fabularny. Życzenia pojawiają się znacznie częściej niż zobowiązania, które je realizują. Należy ściśle uwzględnić wersje, w których poprawiono określone błędy. Trzeba w jakiś sposób powiadomić użytkowników, że w wersji X naprawiono błąd lub pojawiła się nowa funkcja. Rozwój funkcjonalności wymaga dokumentacji, a dokumentacja zwykle staje się nieaktualna.
Cóż, najśmieszniejsze jest to, że wymagana jest sama infrastruktura techniczna „wsparcia”. Wymagana była strona internetowa, generator dokumentacji, serwer do kompilacji/wdrożenia itp. itd.. Wymagane były inwestycje finansowe w infrastrukturę - minimalne, ale jednak inwestycje.
Rozpoczynając projekt badawczy, nawet nie wyobrażałem sobie, z tak wieloma problemami organizacyjnymi i technicznymi, z którymi będę musiał się zmierzyć w miarę rozwoju projektu. Bardzo pomogło w tym przejście na metodologię git-flow, łatwiej było samemu to rozgryźć i porozumieć się z użytkownikami w temacie wersji i gałęzi.Doświadczenia z crowdfundingu (okropne słowo) Na początku tego roku próbowałem przeprowadzić eksperyment - zorganizowałem zbiórkę datków na infrastrukturę - nazwę domeny i hosting. Zastanawiałem się, ile projekt może zapłacić za własne istnienie. Skutek był taki, że nieznajomi mi ludzie faktycznie przysłali mi około 100-500 rubli. co wystarczyło na opłacenie domeny w strefie .io. Następnie kampanię ograniczono i wstrzymano dopływ środków. Sprawa nie doczekała się pełnego zwrotu, mimo że otrzymano pewną pomoc finansową.
Najważniejsze jest to, że teza o efektywności modelu darowizny jako takiego została sprawdzona in situ. Wniosek - w moim przypadku darowiznę trudno nazwać efektywną, choć nie była ona zerowa Biblioteka przydatnych skryptów Po półtora roku kodowania w 1Script pojawiły się bloki biblioteczne, z których możesz sam skorzystać i polecić innym. Oczywiście do mojej dyspozycji zgromadziło się wiele rozwiązań, które nadawały się do ponownego wykorzystania.
Doprowadziło to do tego, że do silnika dodano możliwość łączenia „pakietów” innych firm, również napisanych w 1Script. Rezultatem był kolejny projekt o nazwie oscript-library. (https://github.com/EvilBeaver/oscript-library) Ta biblioteka oczywiście wymagała również infrastruktury, dokumentacji, aktualizacji dla użytkowników końcowych i nie tylko. Ale przepływ składek od pracowników 1C znacznie wzrósł. W końcu pakiety są opracowywane w znanym już języku, co oznacza, że ​​mogą od razu przynieść korzyści, przenieść istniejące rozwiązania itp. Społeczność „autorów skryptów 1C” zaczęła się rozwijać, co znacznie ułatwił drugi raport na wydarzeniu Infostart w 2015 roku. Jak to wygląda Do importu używana jest specjalna dyrektywa preprocesora #Używać Nie ma go na oryginalnej platformie 1C, ale aby ułatwić importowanie bibliotek, musieliśmy odejść od składni kanonicznej i pożyczyć rozwiązanie z innych ekosystemów.
#Use json // klasa JSON Reader jest zadeklarowana w bibliotece i jest dostępna dzięki dyrektywie #Use Reader Object = New JSON Reader(); // następuje jakiś kod // ...
Zespół autorów opracował konkretne rozwiązanie, przemyślano scenariusze zastosowań, pułapki itp. Jako narzędzie burzy mózgów wykorzystano Google Docs. Menedżer pakietów Do zarządzania pakietami na kolanie napisano prosty menedżer pakietów o nazwie OPM (Menedżer pakietów OneScript). Jest również napisany w 1Script i jest narzędziem do zarządzania pakietami opartym na konsoli. W tej chwili ponownie zastanawiamy się nad infrastrukturą pakietów i pracujemy nad gotową do produkcji wersją projektu opm.W tej chwili 1Script to stabilne narzędzie automatyzacji dla pracowników 1C, z powodzeniem stosowane w kilkudziesięciu firmach. Poza tym OneScript to już swego rodzaju marka, nazwa ta jest znana w społeczności, narzędzie jest aktywnie wykorzystywane, pisane o nim, zadawane pytania, omawiane i co szczególnie przyjemne – ulepszane.
Ponadto biblioteka pakietów kodu wielokrotnego użytku stanowi niemal integralną część projektu. Jest mały, ale obejmuje znaczną część zadań rozwiązywanych codziennie przez typowy pseudonim 1C.
To już nie jest tylko „interpreter 1C”. Społeczność stworzyła ekosystem przydatnych i poszukiwanych narzędzi.
Dla mnie było to wyjątkowe przeżycie, otrzymałam słowa (i czyny) wsparcia od kilkudziesięciu nieznajomych mi osób (a teraz już znajomych). Program, który uruchomiłem wyłącznie w celu „wypróbowania”, stał się działającym projektem wykorzystywanym w rzeczywistych misjach bojowych. Dodatkowo zdobyłem duże doświadczenie w zarządzaniu takim projektem typu open source - wsparcie, utrzymanie, infrastruktura itp...
No i co najważniejsze, sprawia Ci przyjemność zrobienie czegoś niezbędnego.Co planujemy dalej Aktywne korzystanie z biblioteki pakietów ujawniło szereg niedociągnięć i niedogodności. Planujemy wprowadzić zmiany w infrastrukturze pakietów i rozszerzyć funkcjonalność menedżera pakietów. Planujemy także poszerzenie zestawu bibliotek, obecnie pracujemy np. nad wrapperem dla Docker API. Zarządzamy kontenerami Docker za pomocą skryptów 1C, a zmiany na ten temat prawdopodobnie również zostaną opublikowane, gdy zostaną sfinalizowane. Rezultatem będzie uproszczone DSL do manipulacji kontenerami z 1script.Podsumowanie techniczne
  • Język programowania - C#, .NET v4.0/Mono 3.1x
  • Środowisko programistyczne - VS 2013-2015
  • Nazwa interpretera - oscript.exe (uruchomiony w celu wykonania - oscript)
  • Rozszerzenie pliku skryptu - .os
  • Rozszerzenie pliku pakietu - .ospx
  • Wydajność kodu jest w większości pomiarów do 4 razy szybsza niż oryginalna platforma 1C. Przynajmniej nie wolniej od niej.
  • Repozytorium silnika - github.com/EvilBeaver/OneScript
  • Repozytorium bibliotek - github.com/oscript-library
Nie piszę strony internetowej projektu, po pierwsze, żeby nie zabrzmiało jak PR, a po drugie, żeby po prostu nie zniosła efektu habra. Jeśli masz własny projekt, który chciałbyś wydobyć na światło dzienne, pozwól, że dam Ci kilka wskazówek opartych na osobistym doświadczeniu.
  • Idź po to! Jeśli będziesz trzymać swój projekt na biurku i nikomu o nim nie powiesz, nikt się o nim nie dowie. Zacznij od artykułu o Habr. Jeden artykuł nie wystarczy. Wspomnij o swoim projekcie na forach poświęconych tematyce Twojego projektu, podaj przykłady udanych zastosowań.
  • Bądź przygotowany na to, że propozycji od ludzi jest dużo, ale rzeczywistych zobowiązań jest znacznie mniej. Podejście w stylu „To jest open source, potrzebujesz tego, możesz to zrobić” niestety nie sprawdzi się.
  • Myśl z wyprzedzeniem o rozwiązaniu „problemu wzrostu”. Rozwój z reguły jest wybuchowy i dość trudno jest poradzić sobie z gwałtownie zwiększoną pulą zadań.
Dodaj tagi Tło

Podczas realizacji jednego projektu pojawiła się potrzeba wykonania kodu javascript (zwanego dalej JS) pod kontrolą obiektu HTMLDocument Field, uzyskując wynik w 1C. Przykłady podane w znalezionych artykułach nie wydawały się zbyt wygodne w użyciu (czysto osobista opinia). Postanowiono spróbować znaleźć inne, prostsze rozwiązanie, na poszukiwania przeznaczono nie więcej niż 1 dzień.

DIV.setAttribute("onclick", "alert("Współrzędne");");

Uruchommy skrypt

DIV.kliknięcie();

TA DAH. wszystko działa

Procedura RunScript(TextScript) DIV = Elements.doc.Document.getElementById("TEST"); DIV.setAttribute("onclick", TextScript); DIV.kliknięcie(); Koniec procedury

Aktualizacja z 02.08.2016

W komentarzach zaproponowano inny sposób wywołania JS (dziękuję), jeśli masz możliwość zmiany kodu dokumentu HTML, to możesz napisać w nim funkcję, a następnie ją wywołać. przekazując do niego kod JS.

funkcja exec(skrypt) ( eval(skrypt); )

a następnie w 1C:

Elementy.HTMLDocumentField1.Document.parentWindow.exec("alert("OK")");

Zwracany wynik JS to 1C

Aby przenieść wynik skryptu do 1C z obiektu HTMLDocument Field, użyjemy zdarzenia. Powiążmy zdarzenie On Click z polem HTMLDocument, które otrzymuje 3 parametry wejściowe:

  • Element, w którym nastąpiło zdarzenie (samo pole HTMLDocument)
  • Zdarzenie obiektowe
  • Znak spełnienia standardowego zachowania
  • Aby wywołać zdarzenie po kliknięciu, musisz uruchomić następujący kod js

    Var evt = document.createEventObject(); // utwórz pusty obiekt zdarzenia evt.propertyName = "function1"; // Sugeruję umieszczenie nazwy wyniku (coś w rodzaju typu lub nazwy funkcji, z której otrzymano dane) w atrybucie propertyName evt.data = "156"; //przekażemy dane wynikowe do atrybutu danych document.body.fireEvent("onclick", evt); // wywołaj zdarzenie po kliknięciu pola HTMLDocument

    Wykonując ten kod js w procedurze, po kliknięciu drugiego parametru pojawi się utworzony przez nas obiekt zdarzenia. Co jest dość wygodne w obsłudze.

    Przykład analizy odpowiedzi.

    &OnClient // pobierz nazwę i wynik zdarzenia Procedura DocWhenClicked(Element, EventData, StandardProcessing)OperationName = EventData.Event.propertyName; Dane operacji = Dane zdarzenia.Event.data; If OperationName = "" To // nie jest to nasze wydarzenie Return; koniecJeśli; If OperationName = "Function1" then // wynik przetwarzania ElseIf OperationName = "funkcja2" Then // wynik przetwarzania //...... EndIf; Koniec procedury

    Ta metoda eliminuje potrzebę obsługi oczekiwania i zapewnia wygodny identyfikator zdarzenia. Na podstawie identyfikatora wiemy dokładnie, jakie dane otrzymaliśmy i jak je przeanalizować.

    Dodatki z 26.03.2016

    I w tym miejscu też doszło do nieporozumień (błąd powiela się tylko na platformie 8.3.5.1570, ale żeby zapobiec takim sytuacjom w przyszłości podam rozwiązanie) Już sama przyczyna jest taka, że ​​formularz jest ponownie uruchomiony z polem HTML dokumentu w momencie wywołania procedury po kliknięciu pola HTML, wywołanie platformy całego obiektu COM utknęło i uległo awarii (Wystąpił wyjątek (plik HTML): Nieokreślony błąd). Rozwiązaniem było wyłączenie standardowego wykonywania zdarzenia kliknięcia i wyłączenie trybu wyskakującego zdarzenia. Jak to zrobić, zobacz poniżej.

    // wyłącz propagację zdarzeń

    Evt.cancelBubble = true;

    // wyłącz standardowe zachowanie

    Evt.returnValue = false;

    W rezultacie otrzymamy funkcję przesyłania danych do 1c z JS.

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

    Wniosek.

    Łącząc te metody, możesz dość łatwo uruchomić potrzebny kod js i otrzymać dane w 1C do dalszego przetwarzania.

    Przykładowa realizacja w

    Operator : „Witam! Nazywam się Maria, firma „Windows-to-all-the-world”.

    Klient : "Niczego nie potrzebuję"

    Operator : „Ale mamy lepsze warunki i…”

    Klient (przerywa):„Maryjo, do widzenia!”

    Operator (bełkot):"Działamy na rynku od 2003 roku i przez ten czas..."

    Klient (rozłącza się):...

    Maria wybiera kolejny numer.

    Nudna historia znana każdemu. Po takim dialogu klient zostanie z negatywnym posmakiem, a Windows to All the Lights przeciętnie stracił cenny kontakt. Choć operatorka Maria otrzyma pensję pod koniec miesiąca, więc nie każdy jest w tej sytuacji przegrany.

    Najbardziej obraźliwe w tej sytuacji jest to, że Maria naprawdę się starała, szczerze uważa, że ​​„klienci tego po prostu nie potrzebują - więc tego nie biorą” i w ogóle „jak mogę go zmusić, żeby się nie rozłączał?” Marii nie obchodzi, co ktoś uważa za KPI – i tak wypłaci ci wynagrodzenie. Pod koniec miesiąca menedżer Aleksiej przestudiuje 1001 nagrań rozmów swoich operatorów (zajmuje to co najmniej 2-3 dni w miesiącu), zbeszta swoich podopiecznych - w odpowiedzi otrzyma wymówki, że „znowu baza połączeń nie był celem…”. Aleksiej westchnie ze smutkiem i rozda wszystkim pensje. Rozpoczyna się kolejny miesiąc.

    Zespół jest przyjazny, wykonano wiele pracy, ale to nie może być kontynuowane. (Z) Co jest złe w tym przypadku (ale można to rozwiązać przy niewielkim wysiłku): Podejście operatorów w pracy
  • Dzwonią automatycznie. Ale bez jasnego celu trudno zbudować dobry dialog;
  • Nie wiedzą, jak odpowiedzieć na sprzeciw klienta lub odpowiadają bezskutecznie;
  • Rozłączają się, gdy tylko zaczynają wątpić w powodzenie rozmowy;
  • Jestem pewien, że za ten proces otrzyma wynagrodzenie - więc wszystko robi spokojnie, z przerwami na odpoczynek, bez niezbędnej motywacji;
  • Wszyscy ignorują obowiązujące zasady dzwonienia do klientów i narzekają na złożoność i ilość dyspozycji;
  • Stanowisko menadżera
    Wszystkie te kwestie rozwiązuje się w podsystemie „Umów się na rozmowę!”.

    (można go „wbudować” w 1C lub używać osobno).

    "Zadzwoń!" Móc:
    • Twórz skrypty - moduły mowy dla operatorów
    • Przypisz dostępność skryptów do różnych grup i oddziałów
    • Zbieraj statystyki dotyczące wykorzystania bloków skryptowych, osiągania celów i porażek, mierz konwersję
    • Załaduj bazę połączeń z Excela lub skorzystaj z numerów klientów, do których dzwoniono wcześniej
    • Wyświetl tablicę statystyk dla operatorów
    • Twórz zamówienia, roszczenia podczas przejścia skryptu, wypełniaj dowolne obiekty w swojej bazie danych.
    • Ogranicz bezkrytyczne klikanie instrukcji skryptu
    • Pracuj z telefonią SIP
    • Pracuj z pocztą elektroniczną
    • Konwertuj wiadomości e-mail, zapytania ze strony internetowej na leady i potrzeby klientów, ładując je do systemu
    • Zarządzaj klientami, potencjalnymi klientami i transakcjami
    "Zadzwoń!" pozwala zbudować zamknięty cykl interakcji z klientem.

    Etapy takiej pracy dostosowujemy do Twojego gustu. Na przykład tak:

    Opcja 1

  • System zyskał nowego potencjalnego klienta
  • Operator zadzwonił za pomocą algorytmu i wyjaśnił potrzebę wykonania usługi
  • Docelowy kontakt został przeniesiony do działu sprzedaży
  • Menedżer buduje relacje z klientem
  • Menedżer zawiera umowę
  • Opcja nr 2

    Lub tak:

  • Operator przyjmuje połączenie przychodzące
  • Podczas rozmowy telefonicznej uruchamiany jest skrypt określający potrzeby klienta i ustalana jest wymagana firma
  • Operator w trakcie pracy składa zamówienie klienta i określa termin dostawy
  • Zamówienie przekazywane jest do działu zakupów w celu montażu
  • Opcja nr 3

    Lub inna opcja:

  • W serwisie został złożony nowy wniosek, strona przekierowuje pismo do bazy danych dla tego wniosku
  • Baza analizuje list, wyciąga z niego dane kontrahenta, treść wiadomości, tworzy potrzebę i zadanie
  • Bezpłatny operator odbiera zadanie, dzwoni do klienta, rozwiązuje problem
  • Jeśli klientowi wszystko się podobało, albo tworzone jest zamówienie, albo klient jest przekazywany menedżerom
  • Opcja nr 4

    Wymyśl dowolną opcję, którą lubisz!

    Menedżer otrzymuje raporty na koniec miesiąca:

  • Według rozbudowanych statystyk potrzeb klientów - ile było, ilu zostało zakwalifikowanych, ilu odmówiono - dla dowolnego statusu
  • O działaniu skryptów i operatorów konwersacyjnych
  • Jeśli chodzi o kontakty z klientami - co było omawiane, ile razy. Ile osób dzwoniło, ile listów napisali.
  • Jak to działa

    W „Zadzwoń!” wbudowane podsystemy (klikalne):

    Skrypty

    Przez skrypty rozumiemy pewne powiązane działania zgodnie z algorytmem. Na przykład,

  • Połączenie wychodzące - aby sprzedać produkt lub usługę, zaprosić do promocji, wypełnij formularz
  • Połączenie przychodzące - aby poprawnie zrealizować zamówienie, nie zapomnieć o rabacie i dostawie
  • Wypełnienie dokumentu - standardowy formularz w formie asystenta
  • Jak używać
    • Utwórz wzorce konwersacji operatora w konstruktorze
    • W pełni konfigurowalny - wyświetlaj dowolne pola do wypełnienia skryptu rozmowy (dane z ankiety, wprowadzanie zamówień itp.)
    • Podaj łącza do artykułów wewnętrznej bazy wiedzy, aby operatorzy mogli odpowiedzieć na wszelkie pytania techniczne
    • Twórz zamówienia w trakcie skryptu rozmowy, zbieraj reklamacje, wysyłaj pisma i zmieniaj status potencjalnych klientów
    • Daj gwiazdorskim menedżerom większą swobodę w skrypcie rozmowy. Tacy pracownicy nie lubią ograniczeń, ich wydajność jest wyższa, gdy rozmowa nie jest ograniczona w 100% - utwórz scenariusz rozmowy dla takich menedżerów, który będzie służył jako zachęta do ankiety, a przejście między blokami będzie swobodne. Otrzymasz statystyki dotyczące tych gwiazdek i nie będą one czuły się „ściśnięte” przez scenariusz rozmowy
    • Sprawdź pracę operatorów za pomocą scenariuszy połączeń i zapisz wyniki testów w specjalnym dokumencie
    • Pozbądź się kiepskich wywołań, korzystając z konkurencyjnych ustawień wykonywania skryptów
    • Wysyłaj listy z ofertą handlową już w trakcie trwania rozmowy telefonicznej, twórz przy tym skargi od niezadowolonych klientów

    Skrypty są głównym podsystemem „Zadzwoń!” Poniżej znajduje się nieco więcej szczegółów na temat jego ustawień na przykładzie

    Przykład

    Na przykład operator może mieć takie zadanie: „Musimy wywołać listę numerów, odrzucić kontakty inne niż docelowe i przekazać potencjalnych klientów menedżerom”. W tym celu utworzymy w systemie skrypt, załadujemy potencjalne transakcje z pliku xls, operatorzy przejdą transakcje zgodnie ze skryptem, te nie docelowe zostaną wyeliminowane, a docelowe zostaną przekazane menadżerom do pracy. Najpierw utwórzmy skrypt.

    Utwórz nowy „skrypt”

  • Tworzymy schemat działania tego skryptu – co powie operator, jakie wartości wybrać i co system zaproponuje mu dalej
  • Ustawiamy dodatkowe pola skryptu - np. na każdym bloku skryptu powinno być widoczne imię i nazwisko oraz firma klienta
  • Wskazujemy szybkie przejścia z każdego bloku. W każdym bloku wyświetlone zostaną przyciski szybkiego przejścia (operator może w każdej chwili zapytać „Jaką firmą jesteś?” – w tym przypadku operator klika na szybkie przejście, odczytuje blok tekstu o firmie i wraca do poprzedniego bloku)
  • Konfigurujemy skrypt - czy skrypt będzie logowany, czy schemat będzie widoczny, czy konieczne jest użycie protokołu SIP, jakie zadania należy wykonać w trakcie skryptu itp.
  • Przydzielamy do niego prawa dostępu - kto może zobaczyć ten skrypt, utworzyć za jego pomocą nowe połączenie itp.
  • Na schemacie blokowym skryptu wskazujemy, co powinien powiedzieć operator, jakie możliwości reakcji ma klient i jakie pola operator powinien wypełnić na tym etapie.

  • Tekst przemówienia operatora. Możesz wstawić dodatkowe szczegóły z poprzednich bloków skryptu lub wspólnych pól. Możesz sformatować tekst
  • Tutaj ustawia się parametry tekstowe - na zrzucie ekranu widać, że [Nazwa] zostanie wpisane z nazwy firmy
  • Pytamy, czy cel został osiągnięty, czy dotarliśmy do tego bloku, na jakim etapie jest ten blok („nawiązanie kontaktu”, „dotarcie do sekretarki” itp.) i jaki wynik osiągnęliśmy, jeśli to osiągnęliśmy blok
  • Blok skryptu może mieć dodatkowe obciążenia semantyczne:

    • Można na nim umieścić dowolne pola. Przykładowo operator musi wybrać sposób dostarczenia towaru do klienta – odbiór osobisty, przesyłka kurierska na terenie miasta czy międzymiastowa. Dopóki operator nie wypełni tego pola, skrypt nie będzie kontynuował działania. Cóż, na schemacie możesz wskazać, że jeśli wypełniłeś międzymiastowe, musisz pokazać jeden blok, jeśli kurierem, to drugi.
    • Utworzone szczegóły bloku można czymś wypełnić. Przykładowo w pierwszym bloku scenariusza podano nam nazwisko reżysera, a w ostatnim bloku możemy tę informację uzyskać i wyświetlić na formularzu dla operatora
    • Oddalając się od bloku, możesz wykonać pewne czynności. Przykładowo, jeśli klient powie, że w ogóle się nami nie interesuje i nie ma sensu „walczyć”, to ustawimy potrzebę na status „Nietargetowany”. Jeżeli dotarliśmy do końca skryptu i jesteśmy gotowi na przeniesienie Klienta do kolejnego działu, wówczas ustawimy status firmy na „Lead” zamiast „Nowy”. Możesz zmienić dowolne pola, nie tylko te wymienione powyżej
    • Dla bloku możesz ustawić opcje odpowiedzi klienta - „Tak”, „Nie”, „Oddzwoń później”, „Mamy ofertę”, „Nie jestem zainteresowany” itp. W zależności od opcji możesz rozgałęziać diagram skryptu
    • Gdy blok skryptu jest uruchomiony, możesz utworzyć inne elementy. Przykładowo klient zgodził się na podanie swojego adresu e-mail – wówczas niezwłocznie wyślemy mu pismo z CP. Po prostu wskażemy, że należy stworzyć pismo, wypełnić je według wzoru i wysłać na adres Klienta.

    Kończymy na czymś takim:

    Dla operatora forma przetwarzania skryptu będzie prezentowana w ludzkiej postaci „asystenta”. Przykładowo jeden z bloków diagramu może wyglądać następująco:

  • Tekst, który napisaliśmy do operatora
  • Szczegóły, które musi wypełnić na tym etapie
  • Udostępniono opcje odpowiedzi klienta
  • Cel i zadania scenariusza
  • Przejścia do innych bloków dostępne na każdym bloku
  • Wspólne pola skryptu
  • Dziennik wybranych odpowiedzi
  • Po utworzeniu schematu skryptu operator może już przystąpić do wykonywania połączeń - w miejscu pracy operatora (jeśli skrypt ma uprawnienia do tworzenia) można kliknąć przycisk „Utwórz”, wybrać żądany skrypt i np. weź kolejny numer telefonu z tabeli xls, popracuj nad nim:

    Na tym etapie operatorzy mogą już pracować według scenariusza, jednak pojawia się niedogodność pobierania kontaktów ze stołu - prowadzi to do szeregu typowych błędów.

    Załaduj kontakty z arkusza kalkulacyjnego Excel w celu wykonywania połączeń ogólnych

    Będziemy przesyłać nie tylko firmy z ich danymi kontaktowymi, ale także „potencjalne oferty” (tzw. „Leads”) ze statusem „Kwalifikacja”. Ustawmy skrypt tak, aby na bieżąco zmieniał status leadów – z „Odmówiono” na „Spotkanie zaplanowane”. Zatem przyjrzymy się lejkowi tej bazy połączeń.

    Utwórzmy ustawienie ładowania danych:

  • Plik, z którego pobieramy dane
  • Same dane, które zostaną załadowane do bazy danych
  • Jak dokładnie dane zostaną załadowane
  • W ustawieniach możesz określić wypełnienie dowolnych szczegółów tworzonych obiektów. Stworzymy z firmy potencjalną transakcję w statusie „Kwalifikacja” i „wykonanie skryptu” – obiekt gotowy dla operatora do pracy przy pomocy skryptu, wypełnimy projekt, aby następnie przefiltrować wyniki rozmów za pomocą ta baza danych:

    Nie wypełniamy operatora po to, aby każdy mógł zobaczyć powstałe elementy i zabrać je do pracy. Utworzone skrypty będą dostępne poprzez stanowisko operatora:

    Operatorzy klikają przycisk „Dalej” – system wybiera w kolejności kolejny skrypt i rozpoczyna dla niego przetwarzanie. Zatem:

    • Operatorzy zawsze mają przed oczami „aktualne informacje” – nie ma mowy o dublowaniu połączeń
    • Klienci, którzy prosili o oddzwonienie po pewnym czasie, zostają wstrzymani - takie skrypty wyświetlają się w tym samym oknie, w którym znajduje się data kolejnego kontaktu.
    • Operatorzy widzą statystyki rozmów swoich kolegów, motywując się w ten sposób do pracy:

    Operatorzy widzą swoje statystyki bardziej szczegółowo:

    Cóż, jeśli operatorzy są przebiegli, porzucą skomplikowane połączenia z wyprzedzeniem lub spróbują „zarezerwować” jak najwięcej skryptów, możesz ograniczyć wydawanie skryptów, stosując reguły konkurencyjne. Możesz ustawić następujące ograniczenia:

    • Nie więcej niż X skryptów w Y minut
    • Po wykonaniu skryptu odczekaj X minut
    • Możesz pozostawić w oczekiwaniu nie więcej niż X skryptów

    Na tym etapie będziemy mieli już dobrze rozwiniętą bazę leadów – te poboczne zostały wyeliminowane, a tym właściwym nadano odpowiedni status. Praca operatorów tutaj została zakończona, teraz zaangażowani są menedżerowie sprzedaży.

    Włączanie menedżerów do procesu.

    Kierownik działu sprzedaży wchodzi do katalogu firm, wybiera tylko te, które mają kwalifikacje do dzwonienia i wyznacza odpowiedzialnych menedżerów w transakcjach:

    Menedżer wchodzi w przypisaną mu potrzebę klienta i zaczyna działać zgodnie z potrzebą klienta. Wszystkie interakcje są rejestrowane w karcie potrzeb:

    Analiza wyników

    Menedżer widzi zarówno statystyki każdego operatora, jak i konwersję każdego skryptu:

    Na podstawie statusu zrealizowanych potrzeb możesz zbudować lejek:

    Baza wiedzy

    W bazie wiedzy możesz publikować artykuły podzielone na kategorie. Każdą kategorię mogą przeglądać i tworzyć indywidualni użytkownicy. Link do artykułu można umieścić w module obsługi skryptu.

    Jak używać
    • Twórz materiały o swoich produktach i umieszczaj linki do nich w skrypcie rozmowy - wtedy Twoi operatorzy będą mogli odpowiedzieć na pytania techniczne klientów
    • Umieszczaj w artykułach opisy wykorzystania scenariusza konwersacji i przekazuj je nowym pracownikom do wglądu.
    CRM

    Mały system do pracy z relacjami z klientami. Zawiera katalog firm (zawiera link do kontrahenta, jeśli do działającej konfiguracji trzeba wczytać „Umów połączenie!”), kontakty tych firm i potencjalne transakcje. Menedżerowie pracują nad potencjalnymi transakcjami kontrahentów, przetwarzając je według różnych statusów. Na podstawie zrealizowanych transakcji tworzona jest sprzedaż i kontrolowana jest płatność. Na koniec miesiąca menadżer ocenia, ile kontaktów udało się nawiązać, jakie wynagrodzenie należy się generatorom leadów i jakie wskaźniki posiada każdy menadżer.

    Jak używać
    • Prowadzenie statystyk i analiz transakcji klientów
    • Zastanów się nad wszystkimi opcjami pracy z klientami
    • Prześlij nowych potencjalnych klientów, aby zadzwonić
    • Obsługuj „zapomnianych” i „utraconych” klientów
    • Monitoruj wydajność usług

    Każda firma może zawierać unikalne dane ze względu na rodzaj działalności:

    Dla każdej firmy (i potencjalnej transakcji) wyświetlana jest historia interakcji:

    Wszystkie nadchodzące interakcje wyświetlane są w „Aktualnościach”, a każdy menadżer ma do nich szybki dostęp w dowolnym momencie. Kanał wyświetla także komentarze przesłane do Ciebie – np. logistyk zostawia komentarz „Kiedy dostarczamy” w żądaniu klienta, a osoba odpowiedzialna za dostawę widzi to w swoim kanale.

    Menedżer może oceniać pracę swoich podwładnych pod kątem liczby kontaktów z klientami. Kto ile razy dzwonił, pisał listy, komunikował się w komunikatorze, jakie leady wykorzystywano do jakich interakcji.

    Klient poczty

    Podsystem zapewnia nie tylko wysyłanie i odbieranie poczty. Istnieje coś takiego jak filtr poczty, który pomaga określić, co należy zrobić z konkretną literą. Przykładowo, masz na swojej stronie formularz opinii, gdy tylko użytkownik go wypełni, na Twój adres e-mail zostanie natychmiast wysłany list z treścią prośby. Filtruj według opcji „Zadzwoń!” można skonfigurować w ten sposób - „jeśli list przyszedł z adresu [e-mail chroniony], to musisz wyodrębnić z treści listu imię i nazwisko oraz potrzebę klienta i stworzyć nową potencjalną transakcję, korzystając z tych danych." W ten sposób możesz określić regułę określającą, czy list podlega filtrowi, oraz akcję filtrującą dla tego list.

    W tym celu służą:

    • Dane listu - dodatkowe pola listu, np. „Imię i nazwisko”, „Adres dostawy”, „Telefon”, „Treść wiadomości”
    • Wypełnianie danych z pisma - zasady według których system „pobierze” informacje z treści pisma do szczegółów
    • Akcje filtrowania - jakie nowe obiekty e-mail należy utworzyć i jak je wypełnić
    Jak używać:
    • Skonfiguruj automatyczne pobieranie wniosków ze strony internetowej i przydzielanie połączeń do menedżerów zgodnie ze scenariuszem rozmowy dla tych potencjalnych klientów
    • Konwertuj zapytania o produkty (np. przychodzą na konkretny e-mail) na dokument „Zapytanie klienta”, podążaj za dokumentem we wskazanych kierunkach
    • Monitoruj pracę menadżerów z klientami korzystając z wiadomości e-mail bezpośrednio z bazy danych
    Rachunkowość dokumentów

    Umożliwia ewidencjonowanie dokumentów w systemie według ich typów oraz ograniczanie praw dostępu do nich. Na przykład możesz nadać dokumentowi typ „Oświadczenie jakościowe” i udostępnić go tylko działowi „QC”. W tym dokumencie znajdziesz kilka nowych szczegółów, takich jak „Tekst roszczenia”, „Data złożenia wniosku”, „Wynik” i inne. Możesz też zbierać „Wnioski o pracę” od klientów, dołączać do nich pliki i przekazywać je poprzez statusy („Nierozpoczęte”, „W toku”, „Obliczone”, „Uzgodnione”, „Odmowa”).

    Jak używać
    • Konfigurując filtry poczty, możesz tworzyć aplikacje i zapytania o produkty bezpośrednio z listów klientów
    • W połączeniu ze skryptami konwersacji możesz generować dokumenty bezpośrednio w trakcie skryptu rozmowy (np. klient jest niezadowolony z jakości usług – tworzymy „Reklamację”, która następnie zostanie rozpatrzona przez dział QC)

    To wygląda tak:

  • Statusy dokumentów
  • Typ dokumentu określający obecność szczegółów w dokumencie
  • Dodatkowe szczegóły dokumentu
  • Maszyna wirtualna wykonująca skrypty w języku 1C:Enterprise.

    Inaczej mówiąc, jest to możliwość pisania programów w języku 1C bez korzystania z platformy 1C:Enterprise.

    A to pozwala nam docelowo wziąć gotowe fragmenty kodu zapisane w konfiguratorze i przenieść je do programu OneScript przy minimalnej adaptacji.

    I choć zdaniem twórców nie jest to główny cel projektu, widzę zainteresowanie połączeniem się z programu OneScript z bazą danych 1C za pomocą połączenia zewnętrznego i wykonaniem przydatnego kodu.

    Można zapytać – po co to w ogóle konieczne? Dlaczego nie napisać tego samego kodu podczas przetwarzania i nie uruchomić go przez 1c w standardowy sposób?

    Ale mówimy o automatyzacji i pojawiają się tu zasadnicze problemy:

    • nie da się zagwarantować, że baza danych się uruchomi i zostanie w niej wykonany jakiś zewnętrzny kod przetwarzający (ci, którzy się z tym spotkali w praktyce, wiedzą, że zbyt wiele rzeczy może pójść nie tak, zaczynając od tego, że przetwarzanie po prostu nie zostanie zakończone z powodu jakiegoś okna modalnego)
    • Nie ma łatwego sposobu programowego wygenerowania takiego przetwarzania, ale możemy go potrzebować, jeśli mówimy o wykonywaniu przydatnego kodu w grupie baz danych
    • nie ma łatwego sposobu zarejestrowania wykonania tego przetwarzania

    OneScript rozwiązuje wszystkie te problemy.

    Po co pisać i uruchamiać te skrypty w aktualizatorze?

    Ponieważ aktualizator bierze na siebie szereg trudnych rzeczy, aby uprościć pisanie takich skryptów pod kątem interakcji z bazami danych.

    Mianowicie.

    Lista baz danych do przetwarzania

    Bezpośrednio w aktualizatorze wybieramy, ile baz danych potrzebujemy do uruchomienia napisanego przez nas skryptu:

    Przekazywanie parametrów bazy danych

    Podczas wykonywania skryptu aktualizator sam przekazuje do niego niezbędne parametry z informacją o aktualnej bazie danych:

    Wszystkie te parametry możemy wykorzystać w naszym skrypcie, dzięki czemu jest on uniwersalny do wykonania na dowolnej liczbie wybranych baz danych.

    Przykłady takich skryptów możemy znaleźć na liście szablonów aktualizatorów:

    Wstępna archiwizacja bazy danych

    W razie potrzeby aktualizator zadba o utworzenie kopii zapasowej przed wykonaniem skryptu:

    Ta kopia zapasowa będzie zgodna z ogólnym systemem archiwizacji, czyli można ją także „dostroić” w dodatkowych ustawieniach aktualizatora. Taka kopia będzie zawsze oznaczona jako „przed niebezpieczną operacją”.

    Blokowanie, odblokowywanie podstawy

    W razie potrzeby aktualizator całkowicie zablokuje bazę danych przed wykonaniem skryptu i odblokuje ją po:

    I to jest jedna z kluczowych „cech” aktualizatora - w końcu na przykład prawidłowe zablokowanie bazy serwerów w ogólnym przypadku jest raczej nietrywialnym zadaniem.

    Konieczne jest „rozwiązanie” bieżących połączeń użytkowników, połączeń administracyjnych i zadań w tle. A wszystko to poprzez komunikację bezpośrednio z klastrem 1c.

    Zapisywanie raportów

    Aktualizator zapisuje historię wykonania takich skryptów w menedżerze raportów.

    W ogólnych warunkach:

    A więc szczegółowo:

    Powiadomienie e-mailem

    Jeśli masz skonfigurowane powiadomienia e-mail (wszystkie lub tylko w przypadku błędów)...

    Wtedy informacja o wykonaniu skryptów (w tym szczegółowe raporty) dotrze do Ciebie w taki sam sposób, jak informacja o wykonaniu innych operacji z aktualizatora:

    Uruchamianie skryptu zgodnie z harmonogramem

    Monitorowanie chmury

    Podczas zapisywania skryptu mamy także możliwość monitorowania jego pracy w chmurze – moim zdaniem absolutnie rewelacyjna funkcja. To tyle jeśli chodzi o monitorowanie chmury.

    Wykonywanie skryptów wielowątkowych

    Szczegółowo opisano sposób jednoczesnego uruchomienia skryptu dla kilku baz danych.

    Czego jeszcze warto się nauczyć przed napisaniem scenariusza?

    Cóż, oczywiście sam język 1C. Gdzie byśmy byli bez niego...

    Przede wszystkim istnieje podręcznik do języka 1C z przykładami: .

    Warto także omówić różnice między OneScript a standardowym językiem 1C. Jest ich kilka (link).

    Jak mogę wymyślić własne skrypty?

    Dla inspiracji radzę najpierw przeanalizować i zrozumieć skrypty z szablonów aktualizatorów. To już wiele Ci da.

    A jeśli potrzebujesz pomysłu na napisanie skryptu, który przyda się setkom innych użytkowników, to proszę Cię – napisz do mnie o tym w dogodny dla Ciebie sposób. Mam mnóstwo pomysłów, ale brakuje mi czasu i możliwości.

    W tym celu uruchomiłem specjalny projekt na githubie, gdzie zbieram przydatne skrypty od użytkowników aktualizatorów, aby jak najwięcej osób mogło je wykorzystać w swojej pracy.

    Czy chcesz wysłać mi swój scenariusz? Proszę cię o to.

    Z poważaniem, Władimir Milkin (nauczyciel i programista).