1c utworzenie tabeli wartości. Jakie istnieją metody i jak wyszukiwać kilka wartości jednocześnie

Opublikowano 21 września 2011 r

Tabela wartości 1C – część 3. Metadane. Pętla po kolumnach tabeli wartości

W tym artykule opowiem jak pracować z tabelą wartości o „nieznanej” strukturze, jak iterować po kolumnach tabeli wartości, jak wydobywać dane z kolumn i wierszy bez używania nazw kolumn. (Ten artykuł należy do serii artykułów 1C od podstaw; programowanie 1C od podstaw; tabela wartości 1C)

Aby wyjaśnić materiał i móc uruchomić nasze przykłady kodu „na żywo”, potrzebujemy ich tabela testowa wartości 1C. Niektóre z naszych przykładów wyodrębnią dane z tabeli wartości, więc zrobimy tabelę z trzema kolumnami „Nazwisko”, „Imię”, „Drugie imię” i wprowadzimy do niej niewielką ilość danych - aż 3 rzędy :)

Stwórzmy więc tabelę testową wartości 1C i wypełnijmy ją:

MyTZ = Nowa tabela wartości; // utwórz nową tabelę wartości przechowywanych w zmiennej „MyTZ” MyTZ.Columns.Add("Nazwisko"); // utwórz kolumnę „Nazwisko” MyTK.Columns.Add(„Nazwa”); // utwórz kolumnę "Nazwa" MyTZ.Columns.Add("Patronymic"); // utwórz kolumnę „Drugie imię” // dodaj pierwszy wiersz do naszej tabeli wartości NewLine = MyTZ.Add(); NewString.LastName = "Czapajew"; NewLine.Name = "Wasilij"; NewString.Middle name = "Iwanowicz"; // dodaj drugą linię NewLine = MyTZ.Add(); NewString.LastName = "Dzierżyński"; NewRow.Name = "Feliks"; NewString.Middle name = "Edmundowicz"; // dodaj trzecią linię NewLine = MyTZ.Add(); NewLine.LastName = "Kotowski"; NewLine.Name = "Grzegorz"; NewString.Middle name = "Iwanowicz";

Nasza tabela testowa składa się z trzech kolumn: Imię, Nazwisko, Patronim; i ma trzy wypełnione linie z imionami bohaterów wojny secesyjnej.

Pierwsza próbka kodu wylicza kolumny tabeli wartości 1C jako kolekcję.

// wyświetl nazwy wszystkich kolumn TK dla każdej kolumny z MyTZ.Columns Cycle Report("Nazwa kolumny: " + Column.Name); Koniec cyklu;

Nasz cykl wyświetli wszystkie nazwy kolumn w oknie komunikatu 1C:

Nazwa kolumny: Nazwisko Nazwa kolumny: Imię Nazwa kolumny: Drugie imię

Widzimy, że do iteracji po kolumnach używany jest specjalny cykl iteracji kolekcji, podobny do cyklu iteracji wierszy (w poprzednim artykule). MojeTZ.Kolumny- to jest zbiór kolumn tabeli wartości 1C „MyTZ”. Kolekcja zawiera obiekty typu „Kolumna tabeli wartości” Każdy obiekt tego typu jest kolumną tabeli wartości i zawiera właściwości oraz metody. Uzyskując dostęp do tych właściwości i metod, uzyskujemy niezbędne informacje o jednej kolumnie lub wykonujemy z nią inne akcje.

Na przykład dostęp do nieruchomości "Nazwa" (Nazwa kolumny) otrzymujemy nazwę bieżącej kolumny.

Zwracam uwagę na tytuł cyklu: „Dla każdego Kolumna Z MyTZ.Cykl kolumnowy” Zmienna z nazwą "Kolumna" wymyślone przez nas. Nie jest konieczne używanie tej samej nazwy. Możesz na przykład nazwać tę zmienną dowolnie „Moja bieżąca kolumna” Wtedy powyższy przykład będzie wyglądał następująco:

// wyświetl nazwy wszystkich kolumn TK For Each MyCurrentColumn From MyTK.Columns Cycle Report("Nazwa kolumny: " + MyCurrentColumn.Name); Koniec cyklu;

Kiedy podsystem wykonawczy 1C napotka pętlę tego typu, przy każdym przejściu pętli przypisuje jeden element z naszej kolekcji do zmiennej o określonej nazwie, w tym przypadku - jeden element kolekcji kolumny tabeli wartości MojeTZ.Kolumny Następnie uzyskujemy dostęp do zmiennej zawierającej bieżącą kolumnę i korzystamy z właściwości "Nazwa".

Proponuję wyświetlić obok nazwy kolumny numer każdej kolumny w zbiorze kolumn:

// wyświetl liczbę i nazwy wszystkich kolumn tabeli wartości Dla każdej kolumny z MyTZ.Columns Cycle ColumnNumber = MyTZ.Columns.Index(Column); // pobierz numer kolumny ColumnName = Column.Name; // pobierz nazwę kolumny Report("Numer kolumny:" + Numer kolumny + " Nazwa kolumny: " + Nazwa kolumny); Koniec cyklu;

W oknie komunikatu 1C zostanie wyświetlony następujący tekst:

Numer kolumny:0 Nazwa kolumny: Nazwisko Numer kolumny:1 Nazwa kolumny: Imię Numer kolumny:2 Nazwa kolumny: Drugie imię

Należy pamiętać, że kolumny w tabeli wartości 1C są numerowane od zera, podobnie jak wiersze tabeli wartości.

Liczba kolumn w tabeli wartości 1C

Aby sprawdzić liczbę kolumn w tabeli wartości, używamy metody „Count()” na zbiorze kolumn.

Liczba kolumn = MyTZ.Columns.Quantity(); Raport (liczba kolumn);

Na ekranie wyświetli się liczba „3”. Rzeczywiście, nasza tabela ma trzy kolumny: „Nazwisko”, „Imię”, „Patronimiczny”

Pobieranie obiektu kolumnowego według jego numeru (indeksu) i wyliczanie kolumn przy użyciu indeksu kolumny

Zróbmy cykl przeszukiwania wszystkich kolumn tabeli wartości za pomocą indeksów kolumn (liczb). Pamiętaj, że numeracja kolumn zaczyna się od zera. Dlatego musimy zwiększyć licznik cykli „Sch” od zera do liczby równej liczbie kolumn minus jeden.

Dla konta = 0 przez MyTZ.Columns.Quantity() - 1 cykl CurrentColumn = MyTZ.Columns[Act]; Raport(bieżąca kolumna.Nazwa); Koniec cyklu;

Na ekranie otrzymamy następujące informacje

Pełne imię i nazwisko

Myślę, że ten przykład był jasny. Przeszliśmy do metody Ilość() kolekcje kolumnowe” MojeTZ.Kolumny.Ilość()", uzyskałem liczbę kolumn i uruchomiłem pętlę z licznikiem zero zanim liczba kolumn minus jeden. Wewnątrz pętli pobieramy każdą kolumnę ze zbioru kolumn i przypisujemy bieżący obiekt kolumny do zmiennej Bieżąca kolumna Następnie zmienna Bieżąca kolumna wchodzimy na posesję Nazwa i wyświetl wartość tej właściwości na ekranie: Raport(bieżąca kolumna.Nazwa);

Ważne jest, aby nigdy nie mylić właściwości obiektu z metodą obiektu.

Właściwość to pewna wartość statyczna i dostęp do niej jest zapisywany na przykład bez nawiasów Nazwa bieżącej kolumny. Metoda jest zasadniczo procedurą lub funkcją obiektu, a wywołania procedur i funkcji są zawsze pisane w nawiasach (nawet jeśli nie ma parametrów wejściowych). Na przykład: MojeTZ.Kolumny.Ilość()

Jeśli uzyskamy dostęp do metody i zapomnimy napisać nawiasy, interpreter 1C zwróci nam komunikat o błędzie i nie uruchomi kodu. Ponieważ interpreter uzna, że ​​nie uzyskujemy dostępu do metody, ale do właściwości - ponieważ nie ma nawiasów. Ale nie będzie w stanie znaleźć właściwości o tej nazwie (ponieważ istnieje tylko metoda o tej nazwie) - co zostanie podane w komunikacie o błędzie.

Oto, co napisze interpreter, jeśli w tak niepoprawny sposób zapomnę wstawić nawiasy w wywołaniu metody MojeTZ.Kolumny.Ilość(bez nawiasów po „Ilość()”):

Nie znaleziono pola obiektu (ilość)

W takim przypadku „pole” i „właściwość” należy rozumieć jako synonimy lub niedokładność w terminologii programistów 1C. Używają obu tych słów w odniesieniu do tej samej koncepcji. Chociaż w innych językach programowania terminy te mogą oznaczać co innego.

Uzyskiwanie danych z tabeli wartości 1C za pomocą numerów kolumn

Na początek podam prosty przykład uzyskania danych z pierwszego wiersza naszej tabeli. Należy pamiętać, że korzystamy z wstępnie wypełnionej tabeli z początku artykułu. Wiemy na pewno, że tabela ma pierwszy wiersz i co najmniej jedną kolumnę. Jeśli zastosujemy ten przykład do pustej tabeli, wystąpi błąd. Więc:

Pierwsza linia = MyTK; // pobierz pierwszy wiersz (numerowany od zera) FirstColumnValue = FirstRow; // pobierz wartość pierwszej kolumny (numeracja kolumn również jest od podstaw) Report(Value of the FirstColumn); // wyświetl wartość pierwszej kolumny w pierwszym wierszu tabeli

Na ekranie wyświetli się:

Czapajew

Najpierw uzyskaliśmy obiekt wiersza tabeli wartości, uzyskując dostęp do tabeli wartości za pomocą operatora [...]. (jeśli zapomniałeś, jak to zrobić, możesz zajrzeć do poprzednich artykułów) Przekazaliśmy argument „0” wewnątrz operatora. Jest to indeks pierwszego wiersza tabeli wartości. Pierwsza linia = MyTK;

Ponadto mamy również prawo dostępu do obiektu string za pomocą operatora [...]. Wewnątrz tego operatora przekazaliśmy numer kolumny tabeli wartości, w tym przypadku także „0”. I tak otrzymaliśmy wartość kolumny o numerze „0” dla bieżącego wiersza tabeli o numerze „0”. Wyświetliliśmy tę wartość na ekranie i reprezentuje ona ciąg „Chapaev”.

Skomplikujmy trochę nasz przykład:

Pierwsza linia = MyTK; // pobierz pierwszą linię (numerowaną od zera) Report(FirstLine); // wyświetl wartość pierwszej kolumny pierwszego wiersza tabeli Report(FirstRow); // wyświetl wartość drugiej kolumny w pierwszym wierszu tabeli Report(FirstRow); // wyświetl wartość trzeciej kolumny w pierwszym wierszu tabeli

Wyświetliliśmy teraz wartości ze wszystkich trzech kolumn pierwszego wiersza naszej tabeli wartości:

Czapajew Wasilij Iwanowicz

Teraz zmodyfikuję również ten przykład, abyśmy mogli obejść się bez zmiennej "Pierwsza linia"

Raport (MyTZ); // wyświetl wartość pierwszej kolumny pierwszego wiersza tabeli Report(MyTZ); // wyświetl wartość drugiej kolumny w pierwszym wierszu tabeli Report(MyTZ); // wyświetl wartość trzeciej kolumny w pierwszym wierszu tabeli

To samo będzie na ekranie

Czapajew Wasilij Iwanowicz

W powyższym przykładzie widzieliśmy, że aby uzyskać dostęp do wartości znajdującej się w konkretnym wierszu i konkretnej kolumnie tabeli wartości, możemy użyć sekwencyjnego wywołania dwóch operatorów [...] w tej formie: Tabela wartości [indeks wiersza] [indeks kolumny]

Jesteśmy zatem gotowi utworzyć pętlę i uzyskać dane ze wszystkich wierszy i wszystkich kolumn za pomocą indeksów wierszy i kolumn:

For RowCounter = 0 Przez MyTZ.Quantity() - 1 Pętla // cyklicznie przełączaj wiersze For ColumnCounter = 0 Według MyTZ.Columns.Quantity() - 1 Pętla // zagnieżdżona pętla po kolumnach // pobierz wartość komórki (z bieżącego wiersza i bieżące kolumny) CellValue = MyTK[RowCounter][ColumnCounter]; // wyświetl numer wiersza, numer kolumny i wartość komórki Report("Nr wiersza" + Liczba wierszy + "Nr kolumny" + Liczba kolumn + " = " + Wartość komórki); Koniec cyklu; Koniec cyklu;

Na ekranie zostaną wyświetlone następujące informacje:

Wiersz nr 0 kolumna nr 0 = Czapajew Linia nr 0 kolumna nr 1 = Wasilij Linia nr 0 kolumna nr 2 = Iwanowicz Linia nr 1 kolumna nr 0 = Dzierżyński Linia nr 1 kolumna nr 1 = Feliks Wiersz nr 1 kolumna nr 2 = Edmundowicz Linia nr 2 kolumna nr 0 = Kotowski Linia nr 2 kolumna nr 1 = Grigorij Linia nr 2 kolumna nr 2 = Iwanowicz

Korzystając z dwóch cykli, z których jeden jest zagnieżdżony w drugim, wyświetliliśmy wartości wszystkich kolumn ze wszystkich wierszy tabeli wartości 1C. W tym przypadku nie używaliśmy nazw kolumn, ale dostęp do kolumn i wierszy uzyskaliśmy na podstawie ich indeksów. Aby uzyskać więcej zrozumienia, zwróć uwagę na komentarze wewnątrz przykładu.

Podsumowując, proponuję nieco zmienić nasz przykład, aby zamiast numerów kolumn wyświetlał na ekranie ich nazwy. Dodatkowo wykonam bardziej reprezentacyjny projekt wyświetlania treści na ekranie.

Dla LineCounter = 0 Według MyTZ.Quantity() - 1 Pętla // pętla po wierszach Report(" ======= Nr linii " + LineCounter + " ======="); Zgłosić(" "); // przesunięcie wiersza (wstawienie pustego wiersza) For ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 Pętla // zagnieżdżona pętla przechodząca przez kolumny // pobranie wartości komórki (z bieżącego wiersza i bieżącej kolumny) CellValue = MyTZ [LicznikWierszy][Licznik Kolumny]; // pobierz nazwę kolumny ColumnName = MyTZ.Columns[ColumnCounter].Name; // wyświetl nazwę kolumny i wartość komórki Report(NazwaKolumny + ": " + WartośćKomórki); Koniec cyklu; Zgłosić(" "); // przesunięcie wiersza (wstawienie pustej linii) EndCycle;

Teraz na naszym ekranie informacje zaczęły wyglądać bardziej reprezentatywnie:

Linia nr 0 ======= Nazwisko: Czapajew Imię: Wasilij Patronim: Iwanowicz ======= Linia nr 1 ======= Nazwisko: Dzierżyński Imię: Feliks Patronim: Edmundowicz ===== == Linia nr 2 ======= Nazwisko: Kotowski Imię: Grigorij Patronimiczny: Iwanowicz

Tak, prawie zapomniałem. Używając dwóch operatorów [...][...] w wierszu, zamiast indeksu kolumny możemy przekazać nazwę tej kolumny: Tabela wartości [Indeks wiersza] [Nazwa kolumny]

Dla LineCounter = 0 Według MyTZ.Quantity() - 1 Pętla // pętla po wierszach Report(" ======= Nr linii " + LineCounter + " ======="); Zgłosić(" "); // przesunięcie wiersza (wstawienie pustej linii) For ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 Pętla // zagnieżdżona pętla po kolumnach ColumnName = MyTZ.Columns[ColumnCounter].Name; // pobierz nazwę kolumnyCell Value = MyTZ[RowCounter][NazwaKolumny]; //

Zwróć uwagę na linię oznaczoną strzałką. W tej linijce zamiast indeksu bieżącej kolumny podajemy do argumentu nazwę bieżącej kolumny w nawiasach kwadratowych [...] Wynik będzie taki sam.

A teraz ostatnia rzecz w tym artykule.

POPRAWNIE uzyskując wszystkie dane z tabeli wartości 1C za pomocą pętli poprzez zbiór wierszy i zbiór kolumn

Dla każdej bieżącej linii z pętli MyTZ // pętla przez zbiór ciągów Report(" ======= Numer linii " + MyTZ.Index(CurrentLine) + " ======="); Zgłosić(" "); Dla każdej CurrentColumn z pętli MyTZ.Columns // zagnieżdżona pętla wykonująca iterację po zbiorze kolumn ColumnName = CurrentColumn.Name; // pobierz nazwę kolumnyCellValue = CurrentRow[NazwaKolumny]; // pobierz wartość komórki PRZEZ kolumnę NAME Report(ColumnName + ": " + CellValue); // wyświetl nazwę kolumny i wartość komórki Koniec cyklu; Zgłosić(" "); Koniec cyklu;

W przykładzie wykorzystano dwie pętle. Pętla do przeglądania zbioru kolumn jest zagnieżdżona wewnątrz pętli do przeglądania wierszy. Jeśli zapoznałeś się z powyższymi przykładami i przeczytałeś poprzednie artykuły, nie będziesz miał trudności ze zrozumieniem, jak działa ten przykład.

Na koniec maksymalnie zmniejszę liczbę linii kodu w naszym ostatnim przykładzie, eliminując użycie zmiennych pośrednich. Otrzymamy próbkę „kodu przemysłowego”, który jest używany w rzeczywistych problemach.

Należy to robić tylko wtedy, gdy dobrze rozumiesz, co robisz. Jeśli kod jest bardzo złożony, dopuszczalne jest pozostawienie zmiennych pośrednich, aby ułatwić późniejsze zrozumienie własnego kodu. Ponadto każdy kod musi być przynajmniej w minimalnym stopniu skomentowany, aby po pewnym czasie łatwiej było zrozumieć teksty programu.

Dla każdej bieżącej linii z cyklu MyTZ // iteruj po wierszach Report(" ======= Nr linii " + MyTZ.Index(CurrentLine) + " =======" + Symbols.PS); Dla każdej bieżącej kolumny z pętli MyTZ.Columns // iteruj po kolumnach Report(CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]); Koniec cyklu; Zgłosić(" "); Koniec cyklu;

Dane wyjściowe na ekranie nie uległy zmianie, pozostają takie same jak w poprzednim przykładzie:

KURS 2 TYGODNIOWY

„PROGRAMOWANIE W 1C DLA POCZĄTKUJĄCYCH”

Kurs zostanie przesłany e-mailem. Zostań programistą wykonując zadania krok po kroku.

Do wzięcia udziału wystarczy komputer i Internet

Bezpłatny dostęp do kursu:

Sp-force-hide (wyświetlanie: brak;).sp-form (wyświetlanie: blok; tło: #eff2f4; dopełnienie: 5px; szerokość: 270px; maksymalna szerokość: 100%; promień obramowania: 0px; -moz-border -promień: 0px; -webkit-border-radius: 0px; rodzina czcionek: Arial, "Helvetica Neue", bezszeryfowa; powtarzanie tła: brak powtórzeń; pozycja tła: środek; rozmiar tła: auto;) .sp-formularz wejściowy (wyświetlanie: inline-block; krycie: 1; widoczność: widoczne;).sp-form .sp-form-fields-wrapper ( margines: 0 auto; szerokość: 260px;).sp-form .sp -form-control ( tło: #ffffff; kolor obramowania: #cccccc; styl obramowania: jednolity; szerokość obramowania: 1 px; rozmiar czcionki: 15 pikseli; lewe dopełnienie: 8,75 px; prawe dopełnienie: 8,75 px; obramowanie -promień: 4px; -moz-border-promień: 4px; -webkit-border-radius: 4px; wysokość: 35px; szerokość: 100%;).sp-form .sp-field label ( kolor: #444444; czcionka- rozmiar: 13px; styl czcionki: normalny; grubość czcionki: pogrubiona;).sp-form .sp-button ( promień-border: 4px; -moz-promień-border: 4px; -webkit-promień-border: 4px; kolor tła: #f4394c; kolor: #ffffff; szerokość: 100%; waga czcionki: 700; styl czcionki: normalny; rodzina czcionek: Arial, „Helvetica Neue”, bezszeryfowa; box-shadow: brak; -moz-box-shadow: brak; -webkit-box-shadow: brak; tło: gradient liniowy (do góry, #e30d22, #f77380);).sp-form .sp-button-container ( wyrównanie tekstu: do środka; szerokość: auto;)

(Ten artykuł należy do serii artykułów 1C od podstaw; programowanie 1C od podstaw; tabela wartości 1C)

Wirtualna struktura przechowywania danych w formie tabelarycznej – to jest to

Tabela wartości nie jest stałym obiektem bazy danych 1C i nie jest zapisywana między sesjami uruchamiania.

Tabela wartości 1C(TK) jest tworzony „w locie” za pomocą kodu programu, a następnie praca z nim odbywa się w taki sam sposób, jak z każdym innym obiektem programu języka programowania 1C. Korzystanie z wywołań metod i uzyskiwanie dostępu do właściwości obiektu-tabeli.

Inaczej mówiąc, programista tworzy w pamięci tabelę, wypełnia ją danymi, pracuje z nimi, sortuje, grupuje, oblicza sumy i tak dalej. Otrzymuje niezbędne dane do dalszego wykorzystania.

Stwórzmy tabelę wartości i wypełnijmy ją czymś. Należy pamiętać, że tabelę wartości 1C można utworzyć nie tylko ręcznie, dzwoniąc do operatora

NowaTabelaWartości;

Tabela wartości jest często wynikiem wywołania metody na innym obiekcie, na przykład wynik zapytania może zostać zrzucony do tabeli wartości i tak dalej.

Od razu podam prosty przykład.

// MyTZ = Nowa tabela wartości; // utwórz nową tabelę wartości przechowywanych w zmiennej „MyTZ” MójTK. Kolumny. Dodaj("Nazwisko" ); // utwórz kolumnę „Nazwisko” MójTK. Kolumny. Dodaj("Nazwa"); // utwórz kolumnę „Nazwa”. Raport (MyTZ); // wyświetl wartość zmiennej MyTZ //

Stworzyłem tabelę wartości 1C z dwiema kolumnami: „Nazwisko”, „Imię”. Procedura Raport (MyTK) wyświetli typ zmiennej w oknie komunikatu MójTZ: Tabela wartości

Nasza tabela wartości jest na razie pusta. Dodajmy do tego kilka linijek z imieniem i nazwiskiem.

// wypełnij tabelę wartości // dodaj pierwszy wiersz do naszej tabeli wartości NowaLinia = MyTZ. Dodać() ; Nowa linia. Nazwisko = „Sidorov”; Nowa linia. Imię = "Wasja" ; // dodaj drugi wiersz do naszej tabeli wartości NowaLinia = MyTZ. Dodać() ; Nowa linia. Nazwisko = „Iwanow” ; Nowa linia. Imię = „Piotr”;

Otrzymaliśmy taką tabelę:

Musisz pamiętać: Numery wierszy w tabeli wartości zaczynają się od zera

Po co nam w ogóle numery linii? Abyśmy mogli na przykład uzyskać dostęp do osobnego wiersza tabeli wartości, pobierz i wyświetl ten wiersz na ekranie.

// *** wyświetl na ekranie wartości linii zerowej *** (w życiu codziennym numerujemy zwykle rzeczy zaczynając od jedynki, ale tutaj - od zera) // pobierz wiersz zerowy naszej tabeli, używając indeksu wiersza w nawiasach kwadratowych NaszNullString = MyTZ[ 0] ; // teraz cały ciąg zerowy jest zawarty w zmiennej „NaszaFirstLine” Report(NaszNullString.LastName) ; // wyświetl wartość kolumny „Nazwisko” przechowywaną w wierszu zerowym Raport (NaszNullString.Name) ; // wyświetl wartość kolumny „Nazwa” z tej samej linii

W efekcie na ekranie wyświetli się:

Sidorow Wasia

Teraz dla bardzo mądrych i zwięzłych pokażę przykład, który pozwala uzyskać dostęp do wartości kolumny w takim a takim wierszu (Wartość kolumny w takim a takim wierszu to komórka tabeli wartości Termin nieoficjalny, ale wygodny). Ale bez użycia zmiennej pośredniej, takiej jak „NaszZeroString”.

Aby wyświetlić wartość komórek z drugiego wiersza (pamiętaj, że wiersz jest drugim, ale indeks tego wiersza wynosi jeden, więc numeracja zaczyna się od zera)

Na koniec ostatni punkt w tym artykule. Pokazałem przykład dostępu do pojedynczego wiersza tabeli wartości według indeksu (numeru wiersza). Uniwersalną formą odczytu lub przypisania zawartości komórki jest: „MojaTabelaWartości[RowNumber].NazwaKolumny”

Teraz dam ci cykl pełnego wyjścia zawartości tabeli wartości. Bez szczegółowych wyjaśnień, żebyście też mogli sobie pogłówkować :)

// // wykonaj pętlę i wyświetl wszystkie wiersze naszej tabeli wartości// Dla LineNumber = 0 Według MyTZ. Quantity() - 1 raport cyklu (MyTZ[NumerLinii] .Nazwisko) ; // wyświetl wartość kolumny „Nazwisko”. Raport (MójTK[NumerLinii] .Nazwa) ; // wyświetl wartość kolumny „Nazwa”. Koniec cyklu ;

W wyniku uruchomienia tej pętli na ekranie wyświetli się:

Sidorow Wasia Iwanow Petya

Tutaj powiedziałem ci podstawy pracy z tabelą wartości 1C. Informacje te dotyczą 1C 8.0, 8.1, 8.2.Interesujące szczegóły dotyczące obiektu „Tabela wartości 1C” na tym się nie kończą. Obiekt ten posiada ogromne możliwości wygodnej pracy z danymi. O tym opowiem w kolejnych artykułach.

Degtyarew Roman.

Jak nauczyć się programować w 1C od podstaw?

Jak pracować jako programista 1C i zarabiać do 150 000 rubli miesięcznie?

ZAREJESTRUJ SIĘ ZA DARMO

KURS 2 TYGODNIOWY

„PROGRAMOWANIE W 1C DLA POCZĄTKUJĄCYCH”

Kurs zostanie przesłany e-mailem. Zostań programistą wykonując zadania krok po kroku.

Do wzięcia udziału wystarczy komputer i Internet

Bezpłatny dostęp do kursu:

Sp-force-hide (wyświetlanie: brak;).sp-form (wyświetlanie: blok; tło: #eff2f4; dopełnienie: 5px; szerokość: 270px; maksymalna szerokość: 100%; promień obramowania: 0px; -moz-border -promień: 0px; -webkit-border-radius: 0px; rodzina czcionek: Arial, "Helvetica Neue", bezszeryfowa; powtarzanie tła: brak powtórzeń; pozycja tła: środek; rozmiar tła: auto;) .sp-formularz wejściowy (wyświetlanie: inline-block; krycie: 1; widoczność: widoczne;).sp-form .sp-form-fields-wrapper ( margines: 0 auto; szerokość: 260px;).sp-form .sp -form-control ( tło: #ffffff; kolor obramowania: #cccccc; styl obramowania: jednolity; szerokość obramowania: 1 px; rozmiar czcionki: 15 pikseli; lewe dopełnienie: 8,75 px; prawe dopełnienie: 8,75 px; obramowanie -promień: 4px; -moz-border-promień: 4px; -webkit-border-radius: 4px; wysokość: 35px; szerokość: 100%;).sp-form .sp-field label ( kolor: #444444; czcionka- rozmiar: 13px; styl czcionki: normalny; grubość czcionki: pogrubiona;).sp-form .sp-button ( promień-border: 4px; -moz-promień-border: 4px; -webkit-promień-border: 4px; kolor tła: #f4394c; kolor: #ffffff; szerokość: 100%; waga czcionki: 700; styl czcionki: normalny; rodzina czcionek: Arial, „Helvetica Neue”, bezszeryfowa; box-shadow: brak; -moz-box-shadow: brak; -webkit-box-shadow: brak; tło: gradient liniowy (do góry, #e30d22, #f77380);).sp-form .sp-button-container ( wyrównanie tekstu: do środka; szerokość: auto;)

Pozdrawiam wszystkich czytelników infostartu. Artykuł ten poświęcony będzie zagadnieniu programowego tworzenia dowolnej tabeli wartości na formularzu zarządzanej aplikacji.

Cechy zadania.

Każdy, kto programował w zwykłej aplikacji, często stawał przed zadaniem uzyskania dowolnej tabeli wartości na formularzu. Dowolna tabela wartości to tabela, której liczba i rodzaj kolumn nie są z góry znane. Oznacza to, że mogą być 3 kolumny, a może 6, a może 8. W normalnej aplikacji wszystko jest proste: możesz umieścić element „Tabela wartości” na formularzu przetwarzającym, a następnie przenieść utworzoną tabelę wartości ​do tego elementu programowo. Następnie za pomocą prostego polecenia:

Elementy formularza.TableField.CreateColumns();

pobierz gotową tabelę wartości na formularzu. Wydawać by się mogło, że można to zrobić prościej.

To wszystko było w zwykłej aplikacji. W zarządzanej aplikacji wszystko się zmieniło. Stworzenie dowolnej tabeli nie jest takie proste. Teraz musisz albo sztywno sparametryzować tabelę wartości w formularzu, albo utworzyć ją programowo (opisz, cóż, w rzeczywistości jest to istota samej zarządzanej aplikacji). To właśnie spróbujemy zrobić: programowo utwórz dowolną tabelę wartości na kontrolowanym formularzu.

Rozwiązanie problemu.

Pierwszą rzeczą, którą musimy zrobić, to określić, jak tabela będzie wyglądać na formularzu. Najważniejsze jest to, że podczas przetwarzania nie trzeba tworzyć żadnego elementu formularza. Stworzymy go programowo, podobnie jak całą tabelę. Oznacza to, że tabela zostanie opisana i utworzona w momencie otwarcia formularza lub użycia przycisku - w zależności od tego, kto tego potrzebuje.

Utworzenie tabeli na formularzu następuje poprzez opis tabeli wartości jako atrybutu:
SelectionTypeArray = Nowa tablica; Tablica SelectionType.Add(Type("Tabela wartości")); ChoiceTypeDescription = Nowy opis typu (ChoiceTypeArray); Tablica szczegółów = Nowa tablica; Tablica atrybutów.Add(Nowe atrybuty formularza("Tabela zestawieniowa", Opis typu wyboru, "", "TZN")); Teraz musimy utworzyć programową tabelę wartości zawierającą dane. Jeśli tabelę wartości uzyskamy z zapytania, to wszystko jest mniej więcej w porządku. Jeżeli tabela jest tworzona ręcznie, to znaczenie kolumn, które będą zawierać liczby lub daty, można ustalić poprzez „Opis typów”. Chodzi o to, że kolumny w tabeli wartości muszą mieć jakiś typ. Jeśli na przykład oczekuje się, że użytkownik będzie interaktywnie wypełniał dane w tych kolumnach, to nie można dodać kolumny tabeli wartości po prostu z nazwą; musi ona mieć typ. Pamiętajcie - to bardzo ważne, bo... Typy te przeniesiemy do tabeli na formularzu.
Tworzymy tabelę zawierającą kilka kolumn:
CD = NewDateQualifiers(DateParts.Time); TablicaKD = Nowa tablica; ArrayCD.Add(Typ("Data")); OpisTypesTime = Nowe typy opisów(ArrayCD,CD); TZ = Nowa tabela wartości;
TK.Columns.Add("Z", OpisTypyCzas);
TK.Columns.Add("Przed", OpisTypyCzas);
TK.Columns.Add("Nazwa");
TK.Columns.Add("Note"); // Imię i nazwisko oraz Uwaga - wiersze Następnie wypełnimy naszą tabelę programu TK niezbędnymi danymi. Otrzymujemy tabelę TK, która zawiera niezbędne wartości i jest gotowa do przeniesienia do utworzonego atrybutu formularza. Dla każdej kolumny z cyklu kolumn TK

Array of Attributes.Add(New Form Attributes(Column.Name, Column.ValueType,"ScheduleTable"));
Koniec cyklu;
ZmieńSzczegóły(Szczegóły Tablicy);
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = TableDisplay.List;

To prosta kombinacja i nasz stół jest gotowy.

Dla każdej kolumny z cyklu kolumn TK

NewElement = Elements.Add(Nazwa Kolumny, Typ("PoleForm"), SelectionFieldTable);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "Tabela harmonogramu." + Nazwa kolumny;
NowyElement.Width = 10;
Koniec cyklu;

Projekt warunkowy, jeśli tego potrzebujemy, piszemy go również ręcznie, menu poleceń - ręcznie. Procedury obsługi tabel są również pisane ręcznie. Na przykład, aby dodać procedurę obsługi zdarzeń dla tabeli „Wybór”:

Tabela SelectionFields.SetAction("Wybór","TZNSelekcja");

Aby przetworzyć to zdarzenie, zaleca się osobną procedurę w formie procedury:

&Na kliencie
Procedura TKNSelection(TK, SelectedRow, Field, StandardProcessing)
//polecenia procedury obsługi EndProcedure

Należy pamiętać, że procedury obsługi tabel uruchamiają się na kliencie i dlatego muszą mieć polecenie wskaźnika kompilatora

&Na kliencie

No cóż, ostatnią rzeczą, którą chciałem dodać, jest to, że po wszystkich tych krokach pamiętaj o przekazaniu gotowej tabeli do atrybutu formularza:

Wartość–FormAttributes(ToR, „ScheduleTable”);

Oto co mamy w rezultacie:


A oto obsługa zdarzenia „Selection”:



Posłowie.

Mam nadzieję, że artykuł pomoże programistom 1C, którzy zaczynają programowo tworzyć tabele w formularzu.

Możesz pobrać przetwarzanie, które programowo tworzy tabelę wartości i wyświetla ją w łatwym do zarządzania formularzu z komentarzami, które pomogą Ci stworzyć własne tabele.

Aby rozliczyć pieniądze i towary, w biznesie szeroko stosuje się różne tabele. Prawie każdy dokument jest tabelą.

W jednej tabeli wyszczególnione są towary, które mają zostać wysłane z magazynu. Kolejna tabela pokazuje obowiązki zapłaty za te towary.

Dlatego w 1C praca z tabelami zajmuje ważne miejsce.

Tabele w 1C nazywane są również „częściami tabelarycznymi”. Mają je katalogi, dokumenty i inne.

Zapytanie po wykonaniu zwraca tabelę, do której można uzyskać dostęp na dwa różne sposoby.

Pierwsza - szybsza - selekcja, uzyskanie z niej wierszy możliwa jest tylko po kolei. Drugim jest wgranie wyniku zapytania do tabeli wartości i następnie losowy dostęp do niej.

//Opcja 1 – sekwencyjny dostęp do wyników zapytania

//weź stół
Wybierz = Query.Run().Wybierz();
// przeglądamy po kolei wszystkie wiersze wyniku zapytania
Podczas gdy pętla Select.Next()
Raport(Wybór.Nazwa);
Koniec cyklu;

//Opcja 2 – przesłanie do tabeli wartości
Żądanie = Nowe żądanie("WYBIERZ nazwę Z katalogu.Nomenklatura");
//weź stół
Tabela = Query.Run().Unload().
// dalej możemy także iterować po wszystkich liniach
Dla każdego wiersza z cyklu tabeli
Raport(String.Name);
Koniec cyklu;
//lub dowolny dostęp do ciągów znaków
Row = Table.Find("Łopata", "Nazwa");

Ważną cechą jest to, że w tabeli uzyskanej z wyniku zapytania wszystkie kolumny zostaną wpisane ściśle. Oznacza to, że zamawiając pole Nazwa z katalogu Nomenklatura, otrzymasz kolumnę typu String o dopuszczalnej długości nie większej niż N znaków.

Tabela na formularzu (gruby klient)

Użytkownik pracuje z tabelą po umieszczeniu jej na formularzu.

Podstawowe zasady pracy z formularzami omówiliśmy na lekcji i na lekcji

Umieśćmy więc tabelę na formularzu. Aby to zrobić, możesz przeciągnąć tabelę z panelu Sterowanie. Podobnie możesz wybrać z menu opcję Form/Insert Control.

Dane można zapisać w konfiguracji - należy wówczas zaznaczyć istniejącą (wcześniej dodaną) część tabelaryczną obiektu konfiguracyjnego, którego formularz edytujemy.

Kliknij przycisk „...” we właściwości Dane. Aby zobaczyć listę części tabelarycznych należy rozwinąć gałąź Obiekt.

Po wybraniu części tabelarycznej sam 1C doda kolumny do tabeli w formularzu. Wiersze wprowadzone przez użytkownika do takiej tabeli zostaną automatycznie zapisane wraz z księgą/dokumentem.

W tej samej właściwości Dane możesz wprowadzić dowolną nazwę i wybrać typ Tabeli wartości.

Oznacza to, że wybrano dowolną tabelę wartości. Nie doda automatycznie kolumn ani nie zostanie automatycznie zapisany, ale możesz z nim zrobić, co chcesz.

Klikając prawym przyciskiem myszy na tabelę, możesz dodać kolumnę. We właściwościach kolumny możesz określić jej nazwę (w celach informacyjnych w kodzie 1C), nagłówek kolumny w formularzu, połączenie z atrybutem części tabelarycznej (ta ostatnia - jeśli nie jest wybrana dowolna tabela, ale część tabelaryczna).

We właściwościach tabeli na formularzu możesz określić, czy użytkownik może dodawać/usuwać wiersze. Bardziej zaawansowaną formą jest pole wyboru Tylko wyświetlanie. Właściwości te są wygodne w użyciu do organizowania tabel przeznaczonych do wyświetlania informacji, ale nie do edycji.

Aby zarządzać tabelą należy wyświetlić na formularzu panel poleceń. Wybierz punkt menu Formularz/Wstaw formant/Pasek poleceń.

We właściwościach paska poleceń zaznacz pole wyboru Autouzupełnianie, aby przyciski na panelu pojawiały się automatycznie.

Tabela na formularzu (klient cienki/zarządzany)

W formularzu zarządzanym te akcje wyglądają nieco inaczej. Jeśli chcesz umieścić część tabelaryczną na formularzu, rozwiń gałąź Obiekt i przeciągnij jedną z części tabelarycznych w lewo. To wszystko!

Jeśli chcesz umieścić tabelę wartości, dodaj nowy atrybut formularza i w jego właściwościach określ typ – tabelę wartości.

Aby dodać kolumny, użyj menu podręcznego tego atrybutu formularza i wybierz opcję Dodaj kolumnę atrybutu.

Następnie przeciągnij także tabelę w lewo.

Aby tabela posiadała pasek poleceń, we właściwościach tabeli wybierz wartości w sekcji Użycie – Pozycja paska poleceń.

Przesyłanie tabeli do Excela

Dowolną tabelę 1C znajdującą się w formularzu można wydrukować lub przesłać do programu Excel.

Aby to zrobić, kliknij prawym przyciskiem myszy puste miejsce w tabeli i wybierz opcję Lista.

W zarządzanym (cienkim) kliencie podobne akcje można wykonać za pomocą pozycji menu Wszystkie akcje/Wyświetl listę.

Pytanie Tworzenie kolumny tabeli wartości różnych typów w 1C v8
Odpowiedź
Tworząc kolumnę tabeli wartości, możesz przekazać tablica typów i być może konkretny typ. Tablica typów jest używana, gdy trzeba określić kilka różnych typów dla jednej kolumny.

Służy do wskazywania typów „obiekt ogólny” - „Opis typów”. Dlatego najpierw wyjaśnimy, czym jest „Opis typów” („Opis typów wartości”).

„Opis typów wartości”. Aby opisać dopuszczalne typy wartości właściwości różnych obiektów w systemie, używany jest specjalny obiekt „Opis typów”. Za pomocą tego obiektu można opisać prawidłowe typy wartości, które można przypisać do właściwości. Aby jeszcze bardziej ograniczyć możliwe wartości typów pierwotnych, podano Number, String i Date kwalifikacje. Kwalifikatory opisują parametry, takie jak długość ciągu lub liczby, prawidłowe części daty itp.

Składnia metody „Opis typu”.

Nowe typy opisów (<Исходное описание типов>, <Добавляемые типы>, <Вычитаемые типы>, <Квалификаторы числа>, <Квалификаторы строки>, <Квалификаторы даты>)
Opcje:
<Исходное описание типов> (opcjonalny)
Typ: OpisTypy. Wstępny opis typów, na podstawie których zostanie zbudowany nowy.
<Добавляемые типы> (opcjonalny)
Typ: tablica, ciąg. Tablica wartości typów Typ składający się z typów, które będą użyte w obiekcie lub ciąg znaków zawierający nazwy typów oddzielone przecinkami.
<Вычитаемые типы> (opcjonalny)
Typ: tablica, ciąg. Tablica wartości Type (lub ciąg znaków zawierający nazwy typów oddzielonych przecinkami) składająca się z typów, które zostaną wykluczone z deklaracji początkowej określonej w pierwszym parametrze.
<Квалификаторы числа> (opcjonalny)
Typ: QualifiersNumbers. Kwalifikatory liczbowe opisujące prawidłowe wartości typu liczbowego.
<Квалификаторы строки> (opcjonalny)
Typ: KwalifikatoryStrings. Kwalifikatory stringowe opisujące prawidłowe wartości typu string.
<Квалификаторы даты> (opcjonalny)
Typ: KwalifikacjeDaty. Kwalifikatory daty opisujące prawidłowe wartości typu Date.
Opis:
Tworzy opis typu na podstawie innego opisu typu, dodając niektóre typy i wykluczając inne. Jeśli nowy kwalifikator nie zostanie określony, kwalifikatory z oryginalnej deklaracji typu zostaną zachowane.
Przykład wykorzystania obiektu „Typ Opis”:

// rozszerz opis prawidłowych typów o nowe typy Tablica = Nowa tablica; Szyk. Dodaj(Typ( „Link referencyjny. Metody”)); Szyk. Dodaj(Typ("Numer" )); Znak = ważny znak. Nieujemne; QuNumbers = Nowe kwalifikatoryNumbers(10, 2, znak); ValidTypes = NewTypeDescription(ValidTypes, Array, KvNumbers);
Teraz w rzeczywistości przykłady prawidłowego tworzenia wartości kolumn różnych typów w tabeli.

Ogólnie wystarczy zdefiniować typy kolumn w następujący sposób:

TK. Kolumny. Dodać( „Indeks sortowania”, Nowe typy opisów („Numer” ) ); TK. Kolumny. Add("NazwaSekcji", Nowy Opis Typu("String" ) ) ; TK. Kolumny. Add("DataCorr" , Nowy typOpis("Data" ) ) ; TK. Kolumny. Dodać( „Bezwarunkowe usunięcie”, Nowy opis typu("Boolean")); TK. Kolumny. Add("Nomenklatura" , Nowy typOpis() ) ; TK. Kolumny. Add("SectionData" , New TypeDescription("Structure" ) ​​​​); // przykład utworzenia kolumn „number” i „string” z wyjaśnieniem parametrów: TK. Kolumny. Dodać( „Procent ukończenia”, Nowe typy opisów („Numer”, Nowe kwalifikatoryNumery (18, 2))); TK. Kolumny. Add("SectionName" , NewTypeDescription("String" , , NewStringQualifiers(200, Dozwolona długość. Zmienna) ) ) ; TK. Kolumny. Add("Data wycofania" , NewTypeDescription("Data" , , , NewDateQualifiers(DateParts.DateTime) ) ) ;

Jednak bardziej ogólnie jako typ kolumny przekazywana jest tablica. Tablicę stosuje się, gdy do jednej kolumny trzeba przypisać kilka typów. Wtedy definicja struktury będzie mniej więcej taka (przykłady podano dla różnych typów kolumn, gdy typem jest tablica, ale dla uproszczenia podany jest skład tablicy tego samego typu, żeby się nie pomylić )

////// tworzenie struktury specyfikacji technicznych (tworzenie kolumn) //// zdefiniuj kwalifikatory do podstawienia w polach kwalifikatorów specyfikacji technicznej CN = Nowe kwalifikatoryNumbers(18, 9); KS = NewStringQualifiers(200); CD = NewDateQualifiers(DataParts.DateTime) ; //// zdefiniuj opisy typów dla przyszłych kolumn TK // Tablica jest wstępnym opisem typów, na podstawie którego zostanie zbudowany nowy // Należy pamiętać, że w przypadku kolumn TK początkowym opisem typu w tym przykładzie jest tablica Tablica = Nowa tablica; Szyk. Dodaj(Typ("Ciąg")); TypeDescriptionString = Nowy opis typu(tablica, , KS) ; Szyk. Jasne() ; Szyk. Dodaj(Typ("Numer")); TypeDescriptionNumber = Nowy opis typu(tablica, , , CN) ; Szyk. Jasne() ; Szyk. Dodaj(Typ("Data")); OpisTypesDate = Nowy opisTypes(Tablica, , , , CD) ; Szyk. Jasne() ; Szyk. Dodaj(Typ( „DirectoryLink.Nomenklatura”) ) ; Typ OpisNomenklatura = Nowy opis typu (tablica) ; Szyk. Jasne() ; Szyk. Dodaj(Typ( „DirectoryLink.SeriesNomenklatura”) ) ; TypeDescriptionSeries = Nowy TypOpis(Tablica) ; Szyk. Jasne() ; Szyk. Dodaj(Typ( „DirectoryLink.Jakość”) ) ; TypeDescriptionQuality = Nowy TypOpis(Tablica) ; Szyk. Jasne() ; Szyk. Add(Type("Boolean") ) ; TypeDescriptionBoolean = Nowy opis typu(tablica) ; // faktyczne dodanie kolumn do TK (tworzenie struktury przyszłego TK) TK. Kolumny. Add("Nomenklatura", OpisTypyNomenklatura) ; TK. Kolumny. Add("Kod" , TypOpisString) ; TK. Kolumny. Dodać( „Nomenklatura serii”, OpisTypySeria); TK. Kolumny. Add("Kod konta" , Typ OpisString) ; TK. Kolumny. Add("ActionDate" , TypeDescriptionDate) ; TK. Kolumny. Add("Jakość" , TypOpisJakość) ; TK. Kolumny. Add("NumberUS", OpisTypuNumber) ; TK. Kolumny. Add("Odpisz" , TypeDescriptionBoolean) ; . . . //////// tworzenie struktury specyfikacji technicznych (tworzenie kolumn) ////////////////////////////////////////////////////////

Aby dodać wiersz do tabeli wartości, zobacz