Dodanie linii do części tabelarycznej dokumentu 1s 8.3. Skróty klawiszowe: działania ogólne

W poprzednim przykładzie możesz dodać następujące wiersze kodu:

Elementy formularza.TableField1.AddRow(); strona = FormElements.TableField1.CurrentRow; p.Pierwszy = 3; p.Second = "Mąka"; p.Ilość = 350;

Jak określić liczbę wierszy w tabeli wartości w 1s 8?

liczbaWierszy = tabela.Ilość(); Report("Liczba wierszy tabeli wartości tabeli = " + liczba wierszy);

Wynik:

Liczba wierszy w tabeli wartości tabeli = 3

Jak usunąć wiersz w tabeli wartości w 1s 8?

wierszTabela = tabela; tabela.Usuń(wierszTabela);

Jak zwinąć tabelę wartości w 1s 8?

Zawalić się:

tabela.Collapse("Druga", "Ilość");

Po splocie otrzymujemy:

Jak posortować tabelę wartości w 1s 8?

Sortuj według drugiej i trzeciej kolumny:

tabela.Sort("Druga, ilość");

Jak ustawić pole tabeli w linii w 1c 8?

W drugiej linii:

Elementy formularza.TableField1.CurrentRow = tabela;

Formularz do druku w 1s 8

Najpierw wykonujemy układ (nazwę obszaru: wybierz wymagane linie układu, we właściwościach, w polu Nazwa wpisz nazwę obszaru), następnie wyświetlaj go w dokumencie arkusza kalkulacyjnego:

Procedura CommandPanel1Print(Button) zmienna td, rs, rs1, układ, kod, nazwa, nomen; kod = 0; układ = GetLayout("Produkty"); nagłówek = układ.GetArea("Nagłówek"); header.Parameters.datta = BieżącaData(); szt = układ.GetArea("pc"); pc1 = układ.GetArea("pc1"); td = Nowy dokument tabelaryczny; td.Output(cap); nomen = Katalogi.Nomenklatura; selekcja = nom.WybierzHierarchicznie(); while fetch.Next() kod pętli = kod + 1; jeśli sample.ThisGroup = True, to pc1.Parameters.code = kod; pc1.Parametry.nazwa = nazwa.wyboru; td.Wyjście(rs1); else rs.Parameters.code = kod; rs.Parameters.name = wybór.Nazwa; td.Wypłata(rs); koniecJeśli; koniec cyklu; itp.ViewOnly = True; td.Show("Katalog ""Nomenklatura"""); Koniec procedury

Podstawowe możliwości języka programowania zwykle obejmują pracę z liczbami i ciągami znaków. Zwykle te funkcje są zakodowane na stałe w kodzie kompilatora (lub implementowane są „podstawowe” klasy języka programowania).

W 1C możliwość pracy z ciągami jest programowana w samej platformie. Dzisiaj przyjrzymy się funkcjom pracy z ciągami 1C w programach we wbudowanym języku 1C.

Wartość linii 1C

1. Zacznijmy od najprostszego. Utworzenie zmiennej i przypisanie jej stałej wartości ciągu wygląda tak w 1C:

Variable = "Witaj, świecie!";

Jeśli chcesz określić cudzysłów w stałej wartości ciągu 1C, musisz go podwoić „”

Zmienna = "Witaj, świecie"!;

2. Podział linii 1C można określić na dwa sposoby jednocześnie. Pierwszym z nich jest użycie symbolu |

Zmienna = „Witam,
| świat! ";

Drugi polega na użyciu wyliczenia systemowego Symbols. Umożliwia dodawanie zarówno znaków podziału linii 1C, jak i innych znaków niedrukowalnych, takich jak TAB.

Zmienna = „Witam” + Symbole.PS + „pokój!”;

3. Konfiguracje w 1C można opracowywać nie tylko dla jednego języka (rosyjski, angielski lub inny) - ale jednocześnie dla kilku języków. W takim przypadku aktualnie używany język wybiera się na dole okna 1C.

Lista języków znajduje się w oknie konfiguracyjnym w gałęzi Ogólne/Języki. Każdy język ma krótki identyfikator, np ru Lub inż.

Oczywiste jest, że podczas programowania takiej konfiguracji linie 1C mogą być również wielojęzyczne. Aby to zrobić, można utworzyć taką linię 1C, określając przez; opcje według identyfikatora języka:

Variable = "ru=""Witaj, świecie! ""; en=""Witaj, świecie! """;

Jeśli użyjesz linii 1C utworzonej w ten sposób jak zwykle, będzie to to, co jest w niej napisane. Aby system podzielił to na dwie opcje i użył tej żądanej, należy skorzystać z funkcji НStr():

//poprawne dla konfiguracji dwujęzycznych
Raport(NStr(zmienna));

Rekwizyty z linią typu 1C

Atrybut jest polem w katalogu/dokumencie 1C. Różni się od zmiennej w programie w języku 1C tym, że dla atrybutu jest dokładnie wskazany jej typ (liczba, ciąg 1C itp.). Jeśli chcesz odświeżyć sobie pamięć o tym, czym jest rekwizyt, obejrzyj lekcję dalej.

Jeśli określisz typ atrybutu - linia 1C, musisz dodatkowo określić parametry.

Linie 1C mają nieograniczoną długość (oznaczoną jako długość = 0) i ograniczoną długość, wskazującą dokładną liczbę znaków. Wiersze 1C o nieograniczonej długości są przechowywane w osobnej tabeli SQL, więc ich użycie jest mniej produktywne niż ograniczone.

Dlatego użycie strun 1C o nieograniczonej długości ma swoje ograniczenia - nie da się ich zastosować wszędzie. Na przykład nie jest dozwolony jako numer dokumentu, kod referencyjny lub pomiar.

Praca ze strunami 1C

Istnieje kilka wbudowanych funkcji platformy 1C do pracy z ciągami znaków.

  • AbbrLP („Niesamowite, ale prawdziwe!”)
    Usuwa dodatkowe spacje z linii 1C. Można go również użyć do konwersji dowolnych typów na ciąg 1C (na przykład liczby).
  • Zmienna = „Wasja” + AbbrLP(” plus”) + „Ola”; //będzie „Wasja i Ola”
    Przykład sumowania kilku wartości ciągu 1C. Rezultatem będzie jedna linia 1C.
  • Zmienna = Lev("Muzyka", 2); //będzie "Mu"
    Zmienna = Średnia("Muzyka", 2, 2); //będzie „zagrożenie”
    Zmienna = Prawa("Muzyka", 2); //będzie „ka”
    Różne opcje uzyskania podciągu z ciągu 1C.
  • Zmienna = Find("Muzyka", "zy"); //będzie 3
    Wyszukaj podciąg w ciągu 1C, zaczynając od znaku 1.
  • Zmienna = StrLength("Muzyka"); //będzie 6
    Zwraca liczbę znaków w wierszu 1C.
  • Report("Hello") //w oknie wiadomości na dole okna 1C
    Alert("Witam") //wyskakujące okno dialogowe
    Status("Hello") //w linii wyświetlania statusu w lewym dolnym rogu
    .

Doprowadzenie obiektów do linii 1C

Jak wiadomo, obecnie najpopularniejszym formatem wymiany ustrukturyzowanych informacji jest XML. Nawet najnowsza wersja MS Office Word i Excel zapisuje pliki w tym formacie (odpowiednio docx i xlsx zmieniają rozszerzenie na zip, otwierają w archiwizatorze).

Platforma 1C do wymiany danych zapewnia kilka opcji, z których główną jest także XML.

1. Najprostszą metodą jest użycie funkcji Abbreviation() lub String(). W treści żądania można użyć funkcji REPRESENTACJA(). Wynik ich działania jest taki sam - generują dla użytkownika ciąg znaków reprezentujący dowolny obiekt 1C.

W przypadku katalogu domyślnie będzie to jego nazwa. Dla dokumentu – nazwa dokumentu, numer i data.

2. Dowolny obiekt 1C (z ograniczeniami) można przekonwertować na XML i odwrotnie. Proces konwersji nazywa się serializacją.

StringViewXml = XMLString(Wartość); //pobierz XML z wartości 1C
Wartość1C = XMLValue(Typ("DirectoryLink.Nomenklatura"),TypeStringXml); //pobierz wartość 1C z ciągu XML, musisz określić typ 1C, który powinien zostać odebrany

3. Istnieje własny sposób platformy 1C na konwersję dowolnego obiektu 1C na ciąg znaków. Migrowano z wersji 1C 7.7. Ten format nie jest rozumiany przez inne programy, ale inny 1C go rozumie, co ułatwia używanie go do wymiany między bazami danych 1C.

Wiersz = ValueInRowInt(Wartość1C); //pobierz ciąg 1C z wartości 1C
ValueVFile("C:\MójPlik.txt", Wartość1C); //inna opcja, otrzymamy plik z zapisanym ciągiem znaków z wartości 1C
Wartość1C = WartośćOdStringInt(Ciąg); //powrót z linii 1C
Wartość1C = PlikWartości("C:\MójPlik.txt"); //powrót z pliku

Edycja linii 1C w formularzu

Oprócz pracy z ciągami 1C w programie w języku 1C, oczywiście chciałbym, aby użytkownik mógł je edytować. Istnieje kilka możliwości:

1. Najłatwiej jest poprosić o wprowadzenie linii 1C na żądanie. Tę metodę stosuje się podczas nauczania programowania 1C, w życiu jest ona używana znacznie rzadziej (ale jest używana!).

Zmienna = „”;
Row = EnterValue(Zmienna, „Wprowadź pełne imię i nazwisko”);

2. Aby wyświetlić szczegóły obiektu 1C (katalog/dokument) lub szczegóły formularza (patrz), najczęściej używane jest pole wejściowe. Jest to najpopularniejsze narzędzie w 1C, umożliwiające użytkownikowi pracę z polami edycyjnymi.

3. Możliwości pola wejściowego można rozszerzyć (zobacz właściwości pola wejściowego, kliknij je prawym przyciskiem myszy, więcej szczegółów):

  • Pole wyboru Tryb edycji wielowierszowej
  • Pole wyboru Zaawansowana edycja (dostępne, jeśli zaznaczono poprzednie pole wyboru)
  • Pole wyboru Tryb hasła (patrz).

4. Jeśli wszystkie możliwości pola wejściowego nie są dla Ciebie wystarczające, istnieje wbudowany edytor. Aby dodać go do formularza należy dodać Pole Dokumentu Tekstowego do menu Form/Wstaw Kontrolę. We właściwościach możesz określić jego tryb działania – właściwość Rozszerzenie.

Pole dokumentu tekstowego nie może być bezpośrednio powiązane z danymi. Konieczne jest napisanie funkcji w obsłudze zdarzenia OnOpen() formularza (patrz):

Elementy formularza.ElementNameTextDocumentField.SetText(StringValue); //tutaj ValueString to tekst otrzymany na przykład z atrybutu

A w module obsługi zapisu - na przykład w przycisku Zapisz - dodaj zapis:

ValueString = FormElements.ElementNameTextDocumentField.GetText(); //WartośćLinia tutaj jest atrybutem, w którym zapisujemy wartość

5. W wersji 1C 8.2.11 w zarządzanych formularzach pojawiła się nowa opcja reprezentowania linii 1C - pole Dokument sformatowany.


Podobnie jak w przypadku dokumentu tekstowego, należy je ustawić podczas jego otwierania i zapisać podczas samodzielnego zapisywania za pomocą programu.

  • W obiekcie 1C, którego formę tworzymy (katalog, dokument, przetwarzanie itp.) - dodaj atrybut o typie Value Storage
  • W funkcji OnReadOnServer() ustawiamy tekst z atrybutu

    //tutaj atrybut jest dodanym atrybutem obiektu 1C
    //tutaj FormattedDocument to nazwa pola w formularzu do edycji
    &Na serwerze

    FormattedDocument = CurrentObject.Attributes.Get();
    Koniec procedury

  • W funkcji BeforeWritingOnServer() lub za pomocą przycisku napiszemy tekst z pola

    &Na serwerze
    Procedura podczas odczytu na serwerze (CurrentObject)
    CurrentObject.Props = NewValueStorage(FormattedDocument);
    Koniec procedury

Części tabelaryczne istnieją dla wielu obiektów w 1C:

  • Katalogi
  • Dokumentacja
  • Raporty i przetwarzanie
  • Plany kont
  • Charakterystyczne plany typu
  • Plany typu obliczeniowego
  • Procesy i zadania biznesowe

Części tabelaryczne pozwalają na przechowywanie nieograniczonej ilości ustrukturyzowanych informacji należących do jednego obiektu.

Przyjrzyjmy się niektórym technikom pracy z częściami tabelarycznymi.

Jak ominąć część tabelaryczną

Aby przejść przez część stołu, możesz użyć pętli Dla każdego

Dla każdego wiersza z tabelarycznej części cyklu

Report(String. Atrybut TabularPart) ;

Koniec cyklu ;

Przy każdej iteracji do zmiennej Linia przesyłany jest następny wiersz sekcji tabelarycznej. Wartości szczegółów wiersza można uzyskać za pomocą wyrażenia Linia.NazwaAtrybutu.

Jak uzyskać i ominąć wybrane wiersze części tabelarycznej

Aby wyświetlić informacje z części tabelarycznej obiektu należy skorzystać z elementu formularza Pole tabeli. Aby włączyć możliwość zaznaczania wielu wierszy w polu tabeli, należy ustawić wartość Wiele na jego posesji Tryb wyboru.

Aby uzyskać listę wybranych linii, użyj następującego kodu:

Pętla służy do iteracji po wybranych liniach. Dla każdego:

Wybrane wiersze = elementy formularza. Nazwa pola tabeli. Wybrane wiersze;

Dla każdego wiersza z pętli wybranych wierszy

//zawartość pętli

Koniec cyklu ;

Jak programowo zaznaczyć wiersze części tabelarycznej (pole tabeli) i odznaczyć je

Aby programowo odznaczyć wiersze pola tabeli:

Elementy formularza. Nazwa pola tabeli. Wybrane wiersze. Jasne() ;

Aby programowo zaznaczyć wszystkie wiersze pola tabeli:

Dla każdego bieżącego wiersza z pętli TabularPart
Elementy formularza. Nazwa pola tabeli. Wybrane linie. Dodaj(bieżący wiersz) ;
Koniec cyklu ;

Jak wyczyścić część stołu

Część tabelaryczna. Jasne() ;

Jak uzyskać bieżący wiersz sekcji tabeli

Bieżąca linia to oś czasu, na której użytkownik aktualnie znajduje się kursor. Aby go uzyskać, należy uzyskać dostęp do elementu sterującego na formularzu, który jest powiązany z częścią tabelaryczną.

W przypadku zwykłych formularzy kod będzie wyglądał następująco:

Elementy formularza. Nazwa pola tabeli. Aktualne dane;

W przypadku formularzy zarządzanych:

Elementy. Nazwa pola tabeli. Aktualne dane;

Jak dodać nowy wiersz do sekcji tabeli

Dodanie nowej linii na końcu części tabeli:

NowyRow = Część Tabeli. Dodać() ;

Dodanie nowej linii w dowolnym miejscu sekcji tabeli (kolejne linie zostaną przesunięte):

NowyRow = Część Tabeli. Wstaw (indeks)
//Indeks - numer dodanej linii. Numeracja linii rozpoczyna się od zera.

Nowa linia. Props1 = "Wartość" ;

Jak programowo wypełnić szczegóły wiersza tabeli

Jeśli chcesz programowo wypełnić szczegóły wiersza sekcji tabeli dodanego przez użytkownika, musisz użyć procedury obsługi zdarzeń sekcji tabeli Kiedy rozpoczynam edycję.

Procedura utworzona przez handler ma trzy parametry:

  • Element- zawiera element kontrolny Pole tabelaryczne.
  • Nowa linia- wartość logiczna. Zawiera wartość PRAWDA, jeśli dodany zostanie nowy wiersz tabeli, oraz Kłamstwo, jeśli użytkownik rozpoczął edycję już istniejącej linii.
  • Kopiuj- wartość logiczna. Zawiera wartość PRAWDA, jeśli użytkownik skopiuje linię, oraz Kłamstwo w innych sprawach.

Spójrzmy na przykład. Załóżmy, że musimy wypełnić szczegóły sekcji tabelarycznej KontoKonto, w przypadku dodania nowej linii. Edytując istniejącą linię nie ma konieczności zmiany konta księgowego.

Procedura TabularPartAtStartEditing(Element, NewRow, Copy)

//Jeśli użytkownik edytuje istniejącą linię, nic nie robimy
Jeśli NIE NewRow to
Powrót;
KoniecJeśli ;

//Jeśli linia jest nowa, ustaw konto księgowe
TechString = Element. Aktualne dane; //Pobierz bieżący wiersz części tabelarycznej
TechString. Rachunkowość = Plany kont. Samonośne. Wymagane konto;
Koniec procedury