1s 8.3 jak otworzyć formularz istniejącego dokumentu. UV: programowe tworzenie i kopiowanie dokumentów z wykorzystaniem konstrukcji Form DataInValue, ValueInFormData


Ponieważ Często pojawiają się pytania dotyczące programowego tworzenia/kopiowania/przetwarzania obiektów 1C:Enterprise w trybie „Managed Forms”, dlatego zdecydowałem się skompilować w tej publikacji przykłady rozwiązania takich problemów, wraz z komentarzami do każdej akcji. Na początku wszystko wydaje się dość zagmatwane, ale jeśli rozłożysz to krok po kroku i trochę się w to zagłębisz, to wszystko powinno się ułożyć.

Przechodząc ze „zwykłych formularzy” na „formularze zarządzane”, musisz zrozumieć, że teraz mamy klient-serwer opcja działanie programu.

Oznacza to, że o ile wcześniej mogliśmy programowo bezpośrednio zmieniać obiekty w „zwykłych formularzach” i widzieć wynik naszych działań na ekranie, o tyle w „formularzach zarządzanych” obiekt na serwerze i obiekt na kliencie (widoczny dla użytkownika) są rozdzielony. Funkcje i procedury, które można wykonać na serwerze i na kliencie, również są częściowo rozdzielone. Przykładowo na serwerze wykonywane są głównie skomplikowane obliczenia i funkcje związane ze zmianami w bazie danych, a na kliencie proste obliczenia i funkcje użytkowe.

PRZYKŁADY:

Poniżej podam przykład jak tworzyć/kopiować/modyfikować dokumenty. Ten przykład został dokładnie przeanalizowany i pozwoli ci zrozumieć architekturę pracy klient-serwer i rozszerzyć tę wiedzę na inne obiekty 1C (katalogi, raporty...).

Zadanie było takie: istnieje katalog nomenklatury, w którym zawarte są dania (catering). Każde danie ma swoją własną kalkulację (skład produktu). Obliczenia przechowywane są w okresowym rejestrze informacyjnym. Formularz elementu zawiera dynamiczną listę z obliczeniami należącą do otwartej anteny (może to być dowolna inna tabela danych). Konieczne było dodanie dwóch przycisków „Utwórz kosztorys” (nowy) i „Kopiuj kosztorys” (aktywny z listy).

W tym celu stworzyłem odpowiednie polecenia i umieściłem je na formularzu.

1. „Utwórz kosztorys”.

&Na kliencie Procedura CreateCalculation(Command) // Utwórz obiekt/formularz dokumentu na kliencie mForm = GetForm("Document.Calculation.ObjectForm");

// Przekazujemy obiekt (dane) otwartego formularza do zmiennej. Form Data = mForm.Object;

// wykonaj proste operacjeForm Data.Dish = Object.Link;.

FormData.Date = CurrentDate();

// Otwórz wypełnioną formę obiektu (pokaż ją użytkownikowi) mForm.Open(); Koniec procedury

W tej wersji wszystko jest proste: tworzymy procedurę na kliencie i wszystkie czynności wykonujemy bezpośrednio na kliencie, bo Nie robimy niczego, co wymagałoby wywołania serwera. Tworzymy/pozyskujemy formularz obiektowy, przekazujemy Obiekt formularza do zmiennej Dane formularza, wykonujemy podstawowe akcje z danymi formularza i otwieramy już wypełniony formularz.

Ponieważ zadaniem jest skopiowanie dokumentu, który już istnieje w bazie danych (stare obliczenie, które użytkownik wybrał na dynamicznej liście), wówczas akcje na danych DB można wykonywać tylko na serwerze. W ten sposób uzyskujemy niezbędne parametry z formularza pozycji (w moim przypadku starej kalkulacji) i przekazujemy te parametry poprzez Strukturę do procedury serwera bez kontekstu wraz ze zmienną Form Data: CopyDocumentObjectOnServer(FormData, DataStructure).

&OnServerWithoutContext Procedura CopyDocumentObjectOnServer(FormData, DataStructure) // Otrzymujemy zwykły obiekt na serwerze za pomocą danych formularza // używanych ze wskazaniem typu w przypadku zmiany dokumentu (&OnServerWithoutContext) //Doc = FormDataValue(FormData, Type("DocumentObject .Obliczenie"));

// Powyższa linia nie jest używana, ponieważ kopiujemy istniejący obiekt Doc = DataStructure.Calculation.Copy();

// Pracujemy z obiektem (różne manipulacje) // wywołujemy procedury eksportu z modułu obiektowego Doc.RecalculatePrices(); // wpisz jego szczegóły Doc.Date = CurrentDate();// Przekaż z powrotem do zmiennej Form Data już zmodyfikowany obiekt (dokument) ValueInFormData(Doc, FormData); Koniec procedury

Już na serwerze za pomocą funkcji FormDataVValue() przekształcamy FormData w obiekt dokumentu znany nam ze „zwykłych formularzy” i pracujemy z nim za pomocą procedur serwerowych. Kopiujemy dane z innego dokumentu, uruchamiamy procedury eksportu z modułu obiektowego i uzupełniamy pozostałe szczegóły. Funkcjonować WartośćDanychFormularza()

wymaga określenia korespondencji (typu wynikowego obiektu): Type("DocumentObject.Calculation").

Jednocześnie zmienione na serwerze Dane Formularza nie znajdą się na samym początku w naszym utworzonym i otwartym formularzu, dlatego wykonujemy procedurę

Programowe otwieranie formularzy w zarządzanej aplikacji 1C znacznie różni się od otwierania ich w zwykłej aplikacji. Przyjrzyjmy się najpierw starej metodzie. Polega na otrzymaniu formularza, a następnie otwarciu go w trybie normalnym lub modalnym (po otwarciu w trybie modalnym formularz blokuje program).

PobierzFormularz(). Otwarte()

Jest to najwolniejsza metoda otwierania formularzy. Pozwala jednak na programowe przetworzenie formularza przed jego otwarciem. Aby przetworzyć kod, musisz trochę zmienić:

Formularz = GetForm( „Dokument. Odbiór towarów i usług. Formularz dokumentu”) ;
//Tutaj wykonujemy akcje z formularzem
Formularz. Otwórz() ;

Należy wziąć pod uwagę, że po otrzymaniu formularza zostanie wykonana kolejna procedura zdarzenia Kiedy utworzono na serwerze.

Przyjrzyjmy się innym metodom, które pozwalają szybciej i wygodniej otwierać formularze w zarządzanej aplikacji 1C. W zależności od konkretnej sytuacji można zastosować różne metody.

1. Jak otworzyć formularz obiektowy w zarządzanej aplikacji, jeżeli istnieje do niego odnośnik.

W tym przypadku wszystko jest niezwykle proste.

RefLink = Katalogi. Nomenklatura. FindByCode("000000001");
OpenValue(RefLink) ;

2. Jak otworzyć formularz wyboru i następnie uzyskać wybraną wartość.

Jest do tego funkcja WprowadźWartość(). Funkcja ma 3 parametry:

  • Zmienna, do której zostanie zapisana wybrana wartość;
  • Podpowiedź, która wyświetli się w oknie wyboru;
  • Opis typów wybranych wartości. Może być kilka typów i w takim przypadku zostaniesz poproszony o wybranie typu przed wybraniem określonej wartości.

W wyniku wykonania funkcji otworzy się domyślny formularz wyboru obiektu określonego typu.

Zmienna wartość;
Tablica= nowa tablica;
Szyk. Dodaj(Typ( „DirectoryLink.Nomenklatura”) ) ;
Szyk. Dodaj(Typ( „DirectoryLink. Kontrahenci”) ) ;

TypeDescription= nowy TypeDescription(Array) ;

Res = EnterValue(Wartość, "Wskazówka" , TypOpis) ;

Poprzednie metody umożliwiały jedynie otwieranie domyślnych formularzy dla obiektów (formularz obiektowy lub formularz selekcji). Jeśli chcesz otworzyć niestandardowy formularz, możesz skorzystać z tej funkcji Otwórz formularz().

Ta funkcja ma sporo parametrów. Przyjrzyjmy się niektórym z nich:

  • Nazwa formularza— tutaj możesz wybrać jeden ze standardowych kształtów obiektów, np. Formularz wyboru Lub Formularz listy. Lub konkretny formularz stworzony przez programistów.
  • Opcje— umożliwia przeniesienie go do formularza w formularzu struktury niektóre parametry przed jego otwarciem, określając w ten sposób dane wyjściowe. Parametrami mogą być dowolne dane, które mogą być przekazywane od klienta do serwera. Parametry przekazane podczas otwierania formularza mogą zostać przetworzone w procedurze Kiedy tworzysz na serwerze() przy otwieranym formularzu.
  • Tryb otwierania formularza— ma 3 opcje: niezależna, blokuje cały interfejs, blokuje formularz właściciela.

Przyjrzyjmy się, jak używana jest ta funkcja Otwórz formularz() w różnych sytuacjach.

3. Jak otworzyć formę istniejącego obiektu

Każdy formularz ma jeden kluczowy atrybut. Jest on wyróżniony pogrubioną czcionką na liście szczegółów formularza i zwykle nosi nazwę Obiekt w postaci elementów podręczników i dokumentów. Inne obiekty mogą mieć inną nazwę. Aby otworzyć formularz istniejącego obiektu należy przekazać parametr do otwieranego formularza Klawisz z wartością jako odniesieniem do obiektu.

&Na kliencie
Procedura Polecenie 1 (Polecenie)
Parametr= nowa struktura;
Parametr. Wstaw("Klucz", ZnajdźC() ) ;
OpenForm(, parametr) ;
Koniec procedury

&Na serwerze
Funkcja ZnajdźC();
Zwróć katalogi. Kontrahenci. FindByRequisites („NIP”, „745107734623”)
Funkcja końcowa

4. Jak otworzyć nowy formularz obiektowy

Tutaj wystarczy prosta funkcja Otwórz formularz() bez żadnych parametrów.

&Na kliencie
Procedura Polecenie 1 (Polecenie)
Otwórz formularz ( „Katalog. Kontrahenci. Formularz obiektu”) ;
Koniec procedury

5. Jak otworzyć nowy formularz obiektowy i wypełnić go na podstawie czegoś

Musisz przekazać parametr Opierać, którego wartość będzie referencją do obiektu bazowego wypełnienia. To rozpocznie procedurę Wypełnienie procesu().

&Na kliencie
Procedura Polecenie 1 (Polecenie)
Parametr= nowa struktura;
Parametr. Wstaw("Baza", LinkToBuyerAccount) ;
Otwórz formularz ( „Dokument. Sprzedaż towarów i usług. Formularz obiektowy”, parametr) ;
Koniec procedury

Ten przykład utworzy dokument Sprzedaż towarów i usług i wypełnione na podstawie faktury płatniczej dla kupującego, do której przesłano link.

6. Jak otworzyć formularz i ustawić w nim selekcję

Wybór w formularzach 1C może być prosty lub złożony. Wybór prosty obejmuje wyrażenia takie jak Organizacja = Horns and Hooves LLC. Dobór złożony obejmuje inne rodzaje porównań, np. Na liście. W tym artykule rozważymy organizację selekcji prostej, a odrębny artykuł poświęcimy selekcji złożonej.

Aby uporządkować prosty wybór należy do otwieranego formularza przekazać parametr z kluczem Wybór, wartością będzie struktura, w której kluczem będzie nazwa pola listy dynamicznej, a wartością będą poszukiwane dane.

Na przykład otwórzmy formularz listy katalogów Numery GTD i dokonaj tam wyboru według właściciela - elementu katalogu Nomenklatura.

&Na kliencie
Procedura Polecenie 1 (Polecenie)
Parametr= nowa struktura;

wybór= nowa struktura;
Wybór. Wstaw("Właściciel", LinkToNomenklatura) ;

Parametr. Wstaw("Wybór", Wybór) ;

Otwórz formularz ( "Katalog.Numery GTD.Formularz listy", parametr) ;
Koniec procedury

7. Jak otworzyć formularz wpisu do rejestru informacji

Aby to zrobić, będziesz potrzebować klucza wpisu do rejestru informacji.

Klucz do nagrywania— są to wartości wszystkich pomiarów i okres (jeżeli rejestr jest okresowy). Oznacza to, że klucz rekordu to parametry, dzięki którym można jednoznacznie zidentyfikować rekord.

Algorytm otwierania jest następujący:

  1. Do struktury wprowadzamy kluczowe dane rekordu wraz z niezbędnymi wartościami.
  2. Powstałą strukturę umieszczamy w tablicy.
  3. Tworzymy klucz rekordu z tablicy.
  4. Przekazujemy parametr do formularza, który się otwiera Klawisz z kluczem zapisu z kroku 3 jako wartością.

&Na kliencie
Procedura Polecenie 1 (Polecenie)
Parametr= nowa struktura;

KeyParameters= nowa struktura;
Kluczowe parametry. Wstaw("Nomenklatura", LinkToNomenklatura) ;
Kluczowe parametry. Wstaw("Typ ceny", LinkToPriceType) ;
Kluczowe parametry. Insert("Kropka", Data) ;

KeyArray = Nowa tablica;
Tablica kluczy. Dodaj(Parametry kluczowe) ;

EntryKey = Nowy ( „Klucz rejestru informacyjnego. Nomenklatura cen”, tablica kluczy) ;

Parametr. Wstaw("Klucz",KluczRekordu) ;

Otwórz formularz ( „Rejestr informacji. Ceny nomenklatury. Formularz ewidencyjny”, parametr) ;
Koniec procedury

Pytanie: Uzyskaj formularz „Na serwerze”


Występuje następujący problem: musisz przesłać formularz na serwer. Rozumiem więc, że trzeba pozyskać strukturę na kliencie i przenieść ją na serwer. Pomóż mi edytować następujący kod
Kod 1C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Utwórz dokument Powiadomienie (tablica wybranych wierszy) ; Utwórz dokument Koniec procedury i procedura na serwerze Utwórz dokument Notify(PatientsArrayIdentifiers, NotNotify = False) Nowy dokument = Dokumenty. st_Powiadomienie. () ; DocumentForm = Nowy dokument. Pobierz formularz( „Nigdy nie powiadamiaj”

; W przeciwnym razie Nowy dokument. Text = "Powiadomienia" ;

Kod 1C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 KoniecJeśli ; Utwórz dokument Nowy dokument. Data = Dzień Początkowy(DataBieżąca()); Utwórz dokument Dla każdego identyfikatora wiersza Z Odpowiedź: Zrobiłem to i zadziałało:& OnClient Procedura Powiadom (polecenie) tablicę SelectedRows = Items. Powiadomienia. Wybrane wiersze; Powiadomienie (tablica wybranych wierszy) ; Koniec procedury i procedura u klienta „Nigdy nie powiadamiaj” Cykl pacjentówArrayIdentifiers NewRow = Nowy dokument. Pacjenci. Dodać() ; NowyRów. Pacjent = Powiadomienia. Znajdź ByIdentifier(StringIdentifier) ​​​​. Pacjent; Koniec cyklu ;

Formularz dokumentu. Otwarte(); Koniec procedury


Pytanie: v7: Otwórz formularz („nie działa!”)!
Piszę, OpenForm("Document.Reservation_Trimming", Kontekst);
ale nie otwiera tego dokumentu, jeśli ktoś wie, proszę o pomoc!

; Próbowałem różnych opcji i ten dokument istnieje.

() Więc... czy to oznacza, że ​​skłamałeś przy 0? Wprowadził społeczność w błąd? Oderwany od ważnych spraw? Zmusiłeś kogoś do zainstalowania dawno zapomnianego 1C 7.7, a ktoś nawet skonfigurował serwer SQL, aby przetestować pracę w różnych wersjach bazy danych? A wszystko to tylko dlatego, że nie mogłeś poprawnie nacisnąć Ctrl+C / Ctrl+V?!


Pytanie: Zewnętrzny drukowany formularz „Zlecenie zapłaty” dla dokumentu „Wpływ na rachunek bieżący” (BP 3.0)
Dzień dobry, dobrzy ludzie!!!
Pomóż czajnikowi!

W 1C 8.3 Księgowość potrzebna do wydrukowania zleceń płatniczych dla dokumentów „Odbiór na rachunek bieżący” za pośrednictwem zewnętrznego drukowanego formularza, ponieważ nie jest on dostępny w samym 1C
Nie ma możliwości podłączenia dodatkowego przetwarzania z pliku.

Może nie być odpowiedni dla tej wersji programu.

(ExternalProcessing.Account.ObjectModule(74,28)): Zmienna nie jest zdefiniowana (SmallCompanyServerManagement)

;

Jak można to naprawić?

artsh powiedział:
Dzień dobry, dobrzy ludzie!!!
(ExternalProcessing.Account.ObjectModule(74,28)): Zmienna nie jest zdefiniowana (SmallCompanyServerManagement)

Jest formularz dostępny tylko dla 8.2, po podłączeniu do 8.3 daje:

Kliknij, aby rozwinąć...
To nie jest kwestia 8,2 czy 8,3! Informacje konfiguracyjne są ważne.
Próbujesz otworzyć przetwarzanie przeznaczone dla UNF w BP (2.0 lub 3.0???)!

Oczywiście w BP nie ma takiej procedury jak „Zarządzanie serwerem małej firmy”..
Znajdź, utwórz siebie lub zrealizuj zamówienie dla Księgowości

W każdym razie musisz wyraźnie wskazać konfigurację programu - BP 2.0 lub 3.0.


Pytanie: Zaplanowane zadanie „Prześlij pliki na serwer”
Dzień dobry
Może ktoś spotkał się z podobnym problemem i jest w stanie mi podpowiedzieć jak go rozwiązać (lub wysłać... we właściwym kierunku)?
Dane początkowe:
1. Istnieją punkty sprzedaży generujące trzy typy plików: CSV, XLS, DB.
2. Pliki przesyłane są do trzech komputerów (różne kanały odbioru plików i różne systemy dekodowania).
3. Następuje przetwarzanie, które pobiera niezbędne dane z otrzymanych plików i ładuje je do systemu bezpieczeństwa informacji plikowej.
4. Przetwarzanie rozpoczyna się poprzez zwykły program planujący.
Zadanie:
2. Zorganizuj pobieranie plików poprzez zaplanowane zadanie.
Problemy:
1. Rutynowe zadania wykonywane są przez procedury serwera, a ładowanie i przetwarzanie plików to głównie procedury klienta.
2. ...?
Pytanie:
Jak mogę przeskanować katalog na innym komputerze w ramach rutynowego zadania i pobrać znalezione pliki?

;

Odpowiedź została już Ci napisana.

Pytanie: Serwer „Nie znaleziono bazy danych”


Dzisiaj wydarzyło się coś dziwnego. Jedna z baz przestała się otwierać. Wyskakuje błąd "nie znaleziono bazy danych". Na serwerze 1C tak jest, a także w sql. Ale nie otwiera się.
Zrobiłem jego kopię na serwerze SQL, a następnie podłączyłem ją do serwera 1C - i wszystko działało dobrze. Ale co się stało ze „starą” bazą?? Jak możesz wyjaśnić, skąd biorą się nogi takiego błędu?

;

Draco powiedział:

No to sprawdź który serwer i porty zostały zarejestrowane jako połączenie z bazą danych i na tym samym klastrze zobacz czy są czy nie i te same porty w klastrze czy nie

Jest formularz dostępny tylko dla 8.2, po podłączeniu do 8.3 daje:

Poproszę Google o rozszyfrowanie

Pytanie: UPP 1.3 W kalkulacji po zwolnieniu „Zarobki” są niższe niż na odcinku wypłaty. POMOC


UPP 1.3 W dokumencie „Kalkulacja przy zwolnieniu” w drukowanym formularzu T-61 w kolumnie „Zarobki” kwota jest mniejsza niż „Naliczone” w drukowanej formie „Potwierdzenia wypłaty” w dokumencie „Obliczanie wynagrodzeń pracowników Organizacja".

Więcej. Kwoty za dokumenty „Płatność za święta i weekendy” są uwzględnione na odcinku wypłaty, ale nie w T-61 po zwolnieniu.

Podaj mi zestaw prawidłowych działań szamańskich, aby wszystko się ułożyło.

;() z aktualizacjami nic się nie stanie... błędy w tej formie są jednymi z najstarszych i nikt ich nie naprawi


;

Wiadomość od szczebel 15

Do kogo to napisałem?

Wiadomość od GreenkA

Przycisk listy wyświetla te „trzy kropki”, które utraciłeś. Nie zostanie to wyświetlone automatycznie, ponieważ typ atrybutu „id_Instance” to String. Gdyby istniał katalog, nie trzeba byłoby niczego zmieniać we właściwościach, a wystarczyłby znak „Auto”.

Wiadomość od szczebel 15

Możesz zaczynać od początku wiele razy, ale wynik będzie taki sam, jeśli nie zrozumiesz, na czym polega problem. Może warto coś jeszcze raz przeczytać? Ten temat, ta książka, wpisz w google...

Odpowiedzi na pytania z pliku

Czytać
Katalog.Książki.Kopie <ИмяТаблицы>.<ИмяПоля>, stąd




.

Jeśli FindString.Quantity() >

Dyrektywy dotyczące kompilacji

&Na kliencie
&Na serwerze (&Na serwerze)

Moduł formularza

Moduł dowodzenia

Moduł ogólny
&Na kliencie, &Na serwerze.

Pytanie: Utworzenie projektu dyplomowego „Biblioteka Elektroniczna”


Cześć. Piszę z dipolem przy 1s. Biblioteka elektroniczna. A więc istota problemu: chciałbym, aby w części tabelarycznej katalogu „Studenci”-1, po wybraniu określonej książki w atrybucie „Tytuł_książki”-2, w atrybucie „id_Instance”-3 pojawiła się lista dostępnych kopie wydają się być do wyboru. Symbole na obrazkach oznaczyłem cyframi obok cudzysłowów. Oczywiście byłoby miło, gdyby status uległ zmianie, gdy egzemplarz dotrze do ucznia, ale jest to zadanie drugorzędne. Proszę o pomoc. Kolejne pytanie: Dlaczego po odwołaniu się do pola mogę dodać tylko standardowy atrybut „Nazwa” do bieżącego pola? Dziękuję za uwagę. (Proszę również polecić książki o czajnikach, które mogłyby pomóc w moim temacie.)

;

Wiadomość od szczebel 15

Nie wiem dlaczego, ale lista pojawia się dopiero po naciśnięciu klawisza F4, a po naciśnięciu strzałki nic się nie dzieje, a wielokropek gdzieś zniknął

Do kogo to napisałem?

Wiadomość od GreenkA

Nie zapomnij włączyć „Przycisku listy” we właściwościach elementu formularza „id_Instance”.

Przycisk listy wyświetla te „trzy kropki”, które utraciłeś. Nie zostanie to wyświetlone automatycznie, ponieważ typ atrybutu „id_Instance” to String. Gdyby istniał katalog, nie trzeba byłoby niczego zmieniać we właściwościach, a wystarczyłby znak „Auto”.

Wiadomość od szczebel 15

Oto co osiągnąłem w 6 godzin i ponad 8 odtworzonych konfiguracji

Możesz zaczynać od początku wiele razy, ale wynik będzie taki sam, jeśli nie zrozumiesz, na czym polega problem. Może warto coś jeszcze raz przeczytać? Ten temat, ta książka, wpisz w google...

Odpowiedzi na pytania z pliku


StandardProcessing = Fałsz; - (Po co to, jak rozumiem, skoro księga nie jest wypełniona, tak że nie jest wykonywane przetwarzanie wyświetlające listę egzemplarzy.)
Wyłączenie przetwarzania zdarzeń w standardowych elementach formularza, aby nasz opis zdarzenia działał.
Przykład Twojej konfiguracji: istnieje element formularza powiązany z atrybutem Book_Name (typ ReferenceLink.Books). Standardowe przetwarzanie zdarzenia StartSelection() tego elementu doprowadzi do otwarcia Formularza Wyboru katalogu książek. Jeśli chcemy przekazać tam dodatkowe parametry, np. ustawić selekcję, otworzyć inny formularz, wyłączamy standardowe przetwarzanie i piszemy, co chcemy zrobić dla tego zdarzenia.

&Na serwerze bez kontekstu (Jaka jest różnica między serwerem z kontekstem i bez kontekstu i dlaczego wybrano ten konkretny)
Przeczytaj o dyrektywach w 1C. Dużo, ale przydatne.

Czytać
Specjalnie na Twoje pytania: to jest tekst żądania, który odnosi się do tabeli Katalog.Książki.Kopie(część tabelaryczna Instancje), można zmienić nazwę tabeli w zapytaniu; tutaj jest ona zdefiniowana jako BooksInstances. Dlatego definiujemy wszystkie powstałe pola jako<ИмяТаблицы>.<ИмяПоля>, stąd
BooksInstances.id_Instance. "BooksInstances.Link = &Link" - wybranie rekordów w żądaniu dla konkretnego elementu w katalogu Książki, który później ustawiamy jako parametr - "Request.SetParameter("Link", Książka);".

Books_Studentid_InstanceWhenChangedOnServer(CurrentLine.Book_Title, CurrentLine.id_Instance); (Jest to rodzaj przekazania do poniższej procedury)
Czy to jest pytanie czy stwierdzenie? Jak tak)

FindRow = CurrentBook.Instances.FindLines(Nowa struktura("id_Instance", id_Instance)); (W ogóle nic tu nie rozumiem i dlaczego potrzebujemy szczególnie struktury)
Czy wiesz, jak korzystać z asystenta składni? Wywołaj ctrl+f1, jeśli w tym momencie najedziesz kursorem na coś niezrozumiałego, natychmiast spróbuje znaleźć informacje na ten temat wraz z opisami i przykładami.
Opis metody FindRows(): wyszukuje w sekcji tabelarycznej wiersze spełniające podany warunek wyszukiwania.
Warunki wyszukiwania podane są w nawiasach w formie struktury, gdzie na początku „id_Instance” jest kluczem struktury, nazwą kolumny wyszukiwania, następnie wartością struktury jest id_Instance (bez cudzysłowu). Przekazaliśmy tę wartość przy wywoływaniu procedury Books_Studentid_InstanceWhenChangedOnServer(Książka, id_Instance).

Jeśli FindString.Quantity() > 0 Następnie () (Czy jeśli wybierzemy jakiś ciąg z instancji, czy uczynimy go fałszywym?)
Nieprawda – jak to jest? W tej linii sprawdzamy, czy wiersze w sekcji tabeli zostały znalezione zgodnie z podanymi parametrami wyszukiwania, aby przy próbie uzyskania wartości według indeksu nie było błędów.

Dyrektywy dotyczące kompilacji


Każda procedura i funkcja modułu formularza, modułu poleceń i wspólnego modułu zarządzanej aplikacji jest poprzedzona dyrektywą kompilacji, która określa środowisko wykonawcze dla tej procedury. Dyrektywę poprzedza znak „&”. Obowiązujące dyrektywy:

&Na kliencie- definiuje procedurę klienta (funkcję);
&Na serwerze (&Na serwerze)- definiuje procedurę (funkcję) serwera;
&Na serwerzeNoContext (&AtServerNoContext)- definiuje procedurę (funkcję) serwera wykonywaną na serwerze poza kontekstem formularza. Zmienne nie mogą być wyrwane z kontekstu. W takich metodach kontekst formularza (w tym dane formularza) nie jest dostępny. Prawidłowe są tylko wywołania innych metod poza kontekstem. Wywołanie tych metod nie powoduje przesyłania danych formularzy do i z serwera. Zastosowanie metod pozakontekstowych pozwala znacząco zmniejszyć ilość przesyłanych danych podczas wywoływania procedury serwera ze środowiska aplikacji klienckiej;
&OnClientAtServerNoContext (&AtClientAtServerNoContext)- definiuje procedurę (funkcję) wykonywaną w module formularza na kliencie i na serwerze, która nie ma dostępu do kontekstu formularza, danych formularza, zmiennych, ale ma dostęp do procedur i funkcji wspólnych modułów - serwerowych, nie -global, jednocześnie serwer i klient. Sama procedura (funkcja) jest dostępna dla procedur kontekstowych i niekontekstowych klienta, serwera oraz funkcji modułu formularza. Dozwolone jest wywoływanie metod serwerowych wspólnych modułów z bezkontekstowych metod formularza po stronie serwera;
&AtClientAtServer (&AtClientAtServer)- definiuje procedurę (funkcję) wykonywaną w module poleceń, wykonywaną na kliencie i na serwerze, mając dostęp do procedur i funkcji wspólnych modułów - serwera, nieglobalnego i jednocześnie serwera i klienta, nie mając dostępu do zmiennych. Sama procedura (funkcja) jest dostępna dla procedur serwera klienta i funkcji modułu poleceń.
Procedura kliencka (funkcja) jest wykonywana w środowisku aplikacji klienckiej. W takiej procedurze dostępny jest kontekst kliencki formularza oraz wywołania procedur dowolnego modułu.

Procedura (funkcja) serwera jest wykonywana w środowisku aplikacji serwerowej. W takiej procedurze dostępne są dane formularza, dostępny jest kontekst serwerowy formularza, dostępne są wywołania serwera oraz procedury pozakontekstowe modułu po stronie serwera. Przy wywołaniu takiej procedury dane formularza zostaną przesłane od klienta na serwer i z powrotem (po zakończeniu wywołania).

Procedura serwera (funkcja) wykonywana poza kontekstem formularza (poza kontekstem) wykonywana jest w środowisku aplikacji serwerowej. W takiej procedurze (funkcji) kontekst formularza (w tym dane formularza) nie jest dostępny. Poprawne są tylko wywołania innych procedur (funkcji) wyrwanych z kontekstu. Po wywołaniu tych procedur (funkcji) dane z formularzy nie są przesyłane na serwer i z powrotem. Zastosowanie procedur (funkcji) pozakontekstowych pozwala znacząco ograniczyć ilość przesyłanych danych podczas wywoływania procedury (funkcji) serwera ze środowiska aplikacji klienckiej.

Brak dyrektywy kompilacji przed procedurą (funkcją) oznacza, że ​​używana jest dyrektywa domyślna. Domyślna dyrektywa to &OnServer. Niedopuszczalne jest stosowanie kilku dyrektyw kompilacji przed jedną procedurą (funkcją). Niedozwolone jest posiadanie procedur (funkcji) o tej samej nazwie, które różnią się jedynie dyrektywami kompilacji.

Moduł zarządzanego formularza umożliwia wykorzystanie instrukcji preprocesora. Zaleca się używanie instrukcji preprocesora wyłącznie wewnątrz procedur (funkcji). Aby zrozumieć wynik, gdy instrukcje preprocesora „przekraczają” granice procedury (funkcji), należy wziąć pod uwagę, że przetwarzanie instrukcji preprocesora odbywa się przed przetwarzaniem dyrektyw kompilacji.

W module poleceń predefiniowana procedura obsługi ProcessCommand musi być poprzedzona dyrektywą &OnClient, ponieważ polecenie jest wykonywane w aplikacji klienckiej.

Moduł formularza
Dyrektywy kompilacji dostępne są w module formularza − &Na kliencie, &Na serwerze, &Na serwerze bez kontekstu, &Na kliencie Na serwerze bez kontekstu.
Moduł dowodzenia
Dyrektywy kompilacji są dostępne w module poleceń − &Na kliencie, &Na serwerze, &Na kliencieNa serwerze.
Moduł ogólny
Dyrektywy kompilacji są dostępne w module ogólnym − &Na kliencie, &Na serwerze.

Pytanie: Praca z komponentem zewnętrznym z serwerem 1C...


Dzień dobry,

Istnieje zewnętrzny komponent napisany w C++, którego zadaniem jest uzyskanie informacji z zewnętrznej bazy danych i zwrócenie wyniku zapytania w postaci Tabeli Wartości w 1C.
Do wygenerowania tabeli wartości na dany moment wykorzystuje się interfejs IDispatch* pBackConnection, otrzymywany jako parametr w funkcji Init(). Następnie po prostu używam funkcji 1C, aby utworzyć tabelę wartości, wypełnić ją i zwrócić do drugiego parametru w CallAsFunc (...).
Problemy zaczęły się wraz z przejściem na cienkie klienty 1C. Po stronie serwera komponent zewnętrzny tak naprawdę nie uruchamia się. Możesz uruchomić go po stronie klienta, ale wszystko wygląda jak kule i wypada z ogólnej logiki „klient-serwer” w 1C. Klient nie rozumie np. czym jest tabela wartości, problemy ze zmiennymi „globalnymi”, sesjami itp.
NativeAPI jest pod tym względem jeszcze bardziej ograniczone.
Taniec z tamburynem doprowadził do tego, że udało mi się uruchomić zewnętrzny komponent pod serwerem 1C, ALE praca trwa, dopóki nie zostanie podjęta próba wywołania Invoke na pBackConnection. 64-bitowa wersja serwera 8.2 próbuje coś zrobić, dopóki nie upłynie limit czasu, wersja 32-bitowa (VK jest oczywiście również 32-bitowa) po prostu od razu przestaje działać.
Zakładam, że serwer 1C nie obsługuje tego trybu pracy.
W związku z tym pojawiają się pytania: czy jest to tymczasowe, czy też logika 1C sprowadza się do anulowania tego schematu pracy? Jeśli nie da się w ten sposób utworzyć wewnętrznych struktur 1C (tabeli wartości), to czy w zasadzie istnieje opis, czym jest tabela wartości na poziomie systemu, aby spróbować ją utworzyć w C++, wypełnij go, a następnie po prostu wsuń do 1C jako parametr zwrotny? Chciałbym przynajmniej uzyskać informację, w którym kierunku kopać.

Dziękuję.

;

Piszesz jedno, a masz na myśli drugie.
W środowisku 1C zadeklarowanie zmiennych, które będą widoczne w różnych sesjach, nie jest teraz niemożliwe, a wcześniej nie było takiej możliwości. Kolejna sesja to fizycznie inny proces.
Sesja to sesja łącząca się z bazą danych, tj. sesja użytkownika. A może dodajesz coś własnego do tej koncepcji?

W ramach jednej sesji możliwe było i jest teraz możliwość zadeklarowania zmiennych w module sesji, które będą żyć i będą widoczne w ramach sesji z różnych miejsc... a właściwie jest ich 4.
- Moduł sesji;
- Zwykły moduł aplikacji;
- Moduł aplikacji zarządzanej;
- Zewnętrzny moduł przyłączeniowy.

No cóż, oczywiście trzeba pamiętać o kontekście. Kontekst serwera nie jest bezpośrednio dostępny po stronie klienta i odwrotnie.

W rzeczywistości architektura 1C przewiduje, że wymiana danych będzie przebiegać w następujący sposób:
- za pomocą parametrów/zwrotów procedur/funkcji;
- za pomocą tzw. parametrów sesji (nie mogą to być obiekty, ale faktycznie widoczne w palecie).

Tabela na formularzu... czy jest połączona z jakąś tabelą obiektową (np. przetwarzanie)? lub nie. Jeśli tak, to jest on dostępny na serwerze (&OnServer) i tam edytuj....

A jednak tak, tabela wartości nie jest dostępna w UV po stronie klienta. Cóż, tak zdecydowało 1C.

Pospiesz się! Działa z Excelem, działa z FSO i wieloma innymi rzeczami, ale tutaj nie działa. Wyłap błąd i przeanalizuj....

Próba
...
swoje działania
...
Wyjątek
str = Opis błędu();
Zakończ próbę;

Przy nowoczesnych możliwościach sprzętowych nie jest to wcale argument.

Czysto Twoja osobista opinia. Nie ma nic wspólnego z rzeczywistością. W żaden sposób. Powtarzam jeszcze raz, 1C działa świetnie z COM. Zarówno z in-proc, jak i out-proc.

Podaj kod, którego używasz do pobrania i skontaktuj się z VK.

Swoją drogą, VK... w Twoim przypadku jest to COM czy Native API?
Jeśli COM, to rejestrujesz go jako... przez regsvr32... jak zatem „rozwiązać” kwestię głębi bitowej?

Pytanie: COMObject("Excel.Application"). Na kliencie i na serwerze


Pozdrowienia.

Napotkałem problem:
Stworzyłem przetwarzanie, które uruchamia Excela, czyta plik, wypełnia go i zapisuje.
Wszystko działa świetnie na kliencie.
Stworzyłem rutynowe zadanie, które uruchamia to na serwerze o określonej godzinie.
Podczas wykonywania na serwerze pojawia się błąd informujący, że MS Excel nie mógł uzyskać dostępu do pliku. Jednocześnie wiadomo na pewno, że com. obiekt Excel nawet nie został utworzony (nie ma go w procesach menedżera zadań).
Warto zauważyć, że jeśli rozpoczniesz przetwarzanie przez klienta z komputera, na którym zainstalowany jest serwer 1C, wszystko zostanie zakończone.

Excel = Nowy obiekt COM("Excel.Application"); Książka = Excel.WorkBooks.Open("D:\Dst\Order.xls");

Mam wrażenie, że chodzi o to, że pracując z klienta, Excel uruchamia się pod użytkownikiem w rzeczywistej sesji, a w przypadku serwera, pod użytkownikiem, wprawdzie z pełnymi uprawnieniami, ale bez uruchomionej sesji.

Serwer Windows Server 2008 R2 Standard. Dodatek Service Pack 1
Jak to obejść?

;

Na wypadek, gdyby ktoś tego potrzebował
Wykonujemy polecenie „mmc comexp.msc /32”, które działa tak samo jak DCOMCONFIG, ale pozwala zobaczyć komponenty 32-bitowe.
Wybór redaktora
Podatek od wartości dodanej nie jest opłatą bezwzględną. Podlega mu szereg rodzajów działalności gospodarczej, inne natomiast są zwolnione z podatku VAT....

„Myślę boleśnie: grzeszę, jest mi coraz gorzej, drżę przed karą Bożą, ale zamiast tego korzystam tylko z miłosierdzia Bożego. Mój grzech...

40 lat temu, 26 kwietnia 1976 r., zmarł minister obrony Andriej Antonowicz Greczko. Syn kowala i dzielnego kawalerzysty, Andriej Greczko...

Data bitwy pod Borodino, 7 września 1812 roku (26 sierpnia według starego stylu), na zawsze zapisze się w historii jako dzień jednego z najwspanialszych...
Pierniki z imbirem i cynamonem: piecz z dziećmi. Przepis krok po kroku ze zdjęciami Pierniki z imbirem i cynamonem: piecz z...
Oczekiwanie na Nowy Rok to nie tylko udekorowanie domu i stworzenie świątecznego menu. Z reguły w każdej rodzinie w przeddzień 31 grudnia...
Ze skórek arbuza można przygotować pyszną przekąskę, która świetnie komponuje się z mięsem lub kebabem. Ostatnio widziałam ten przepis w...
Naleśniki to najsmaczniejszy i najbardziej satysfakcjonujący przysmak, którego receptura przekazywana jest w rodzinach z pokolenia na pokolenie i ma swój niepowtarzalny...
Co, wydawałoby się, może być bardziej rosyjskie niż kluski? Jednak pierogi weszły do ​​kuchni rosyjskiej dopiero w XVI wieku. Istnieje...