Szukaj w tabeli wartości 1C

Jakie istnieją metody i jak wyszukiwać wiele wartości jednocześnie.

Istnieją dwie specjalne metody przeszukiwania tabeli wartości:

1. Znajdź

TVHorizon = Directory.Nomenclature.FindBy Name("Horizon TV");
FoundString = TZNomenklatura.Find(TVHorizon);
//możemy również określić, w których kolumnach szukać, aby przyspieszyć wyszukiwanie
FoundString = TKNomenklatura.Find(TVHorizon, "Nomenklatura");

Ta metoda zwraca pierwszy znaleziony ciąg z poszukiwaną wartością lub Undefined , jeśli go nie znajdzie. Dlatego wygodnie jest używać go do wyszukiwania unikalnych wartości, ponieważ w przeciwnym razie, szukając wartości, będziesz musiał usunąć ją z tabeli, aby znaleźć następną.

Aby nie cierpieć w ten sposób, istnieje następująca metoda, która pozwala znaleźć tablicę odpowiednich ciągów:

2. Znajdź ciągi


Wybór Structure.Insert("Nomenklatura", TVHorizon); // najpierw określamy kolumnę, gdzie szukać, a potem czego szukać.

Ta metoda zawsze zwraca tablicę, ale może być pusta, jeśli nic nie zostanie znalezione. I ta metoda, podobnie jak poprzednia, zwraca same wiersze tabeli wartości, a nie same wartości w osobnej tablicy. Dlatego zmieniając wartości w wierszu tablicy lub, jak w poprzedniej metodzie, dla znalezionego wiersza, zmienisz wartość w przetworzonej tabeli wartości.

Co jeszcze jest dobre w tej metodzie, to to, że może przeszukiwać kilka kolumn tabeli wartości jednocześnie:


SelectionStructure = Nowa struktura;
Wybór Structure.Insert("Nomenklatura", TVHorizon);
Wybór Structure.Insert("Ilość", 10);
FoundStringArray = TKNomenclature.FindStrings(SelectionStructure);

Jedyny minus, jak widać, nie można użyć innego rodzaju porównania niż „równe”

Oto mały fakt na początek - proste przykłady praca z tabelą wartości:

1. Utwórz tabelę wartości

Tabela wartości = Nowa tabela wartości;


2. Utwórz kolumny tabeli wartości:

ValueTable.Columns.Add("Nazwa");
ValueTable.Columns.Add("Nazwisko");


3. Dodaj nowe wiersze, używając nazw kolumn:


NewString.Name = "Wasilij";
NewRow.LastName = "Pupkin";


4. Jak wyszukać wartość w tabeli wartości:
Konieczne jest znalezienie wiersza tabeli zawierającego żądaną wartość.

FoundString = ValueTable.Find(LookupValue);


5. Znajdź pierwsze wystąpienie w określonych kolumnach tabeli wartości

FoundString = ValueTable.Find(LookupValue, "Dostawca, Kupujący");


6. Jeśli chcesz znaleźć wszystkie wystąpienia w tabeli wartości:
Korzystamy ze struktury wyszukiwania.

SearchStructure = Structure("Pracownik", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings(SearchStrings);


Stwórzmy strukturę wyszukiwania, której każdy element będzie zawierał nazwę kolumny jako klucz i szukaną wartość w tej kolumnie jako wartość. Strukturę wyszukiwania przekazujemy jako parametr do metody FindStrings(). W rezultacie otrzymujemy wiersze tabeli.
Jeśli dodamy wyszukiwanie żądanej wartości do struktury wyszukiwania, na przykład również w kolumnie Responsible, to w wyniku zastosowania metody FindRows() otrzymamy wszystkie wiersze, w których zarówno Employee, jak i Responsible są równe żądanemu wartość.

7. Jak przeglądać tabelę wartości w kolejności losowej?

Dla każdego CurrentRow z pętli ValueTable
Raport(BieżącaLinia.Nazwa);
Zakończ cykl;

Zrób to samo, używając indeksów:

SeniorIndex = ValueTable.Count() - 1;
Dla MF = 0 według cyklu SeniorIndex
Raport(TabelaWartości[Liczba].Nazwa);
Zakończ cykl;


8. Usuwanie istniejącego wiersza tabeli wartości

ValueTable.Delete(UsuńWiersz);

według indeksu

ValueTable.Delete(0);


9. Usunięcie istniejącej kolumny tabeli wartości

ValueTable.Columns.Delete(UsuńKolumnę);


według indeksu

ValueTable.Columns.Delete(0);

Należy wziąć pod uwagę, że usunięcie wiersza (lub kolumny) „ze środka” tabeli wartości spowoduje spadek o jeden z indeksów wierszy, które były „po” usunięciu

10. Jak wypełnić tabelę wartości, jeśli nazwy kolumn są zawarte w zmiennych?

Nowy Wiersz = TabelaWartości.Dodaj();
NowyWiersz[NazwaKolumny] = Wartość;


11. Jak wypełnić całą kolumnę tabeli wartości pożądaną wartością?
Kolumna FiscalAccounting Flag w tabeli wartości tabeli wartości musi być wypełniona wartością False

ValueTable.FillValue(False, "Flaga rachunkowości fiskalnej");


Używamy metody FillValues() dla tabeli wartości. Pierwszy parametr to wartość do wypełnienia. Drugi parametr to nazwa wypełnionej kolumny.

12. Jak wypełnić tabelę wartości „TableRecipient” danymi tabeli wartości „SourceTable”?

Jeśli tabela odbiorców nie istnieje w momencie operacji lub jej poprzednie kolumny nie muszą być zapisywane, możesz utworzyć ją jako kompletną kopię oryginału

Odbiorca tabeli = TabelaOriginal.Copy();


Opcja druga: istnieje tabela TableReceiver i szkoda stracić jej kolumny i ograniczenia dotyczące typów danych kolumn. Musisz jednak wypełnić dane dla kolumn, których nazwy odpowiadają nazwom tabeli źródłowej.

Częściowy transfer danych dla kolumn o pasujących nazwach:

Dla każdego wiersza SourceTable z SourceTable Loop
FillPropertyValues(NewString, SourceTableString);
Zakończ cykl


Dla każdego wiersza tabeli źródłowej do tabeli docelowej dodawany jest nowy wiersz, a wartości są wypełniane w tych kolumnach nowej tabeli, których nazwy odpowiadają nazwom kolumn w tabeli źródłowej

Jeśli tabele nie zawierają kolumn o tej samej nazwie, tabela docelowa będzie zawierać tyle wierszy z wartościami null, ile było wierszy w tabeli źródłowej.
Jeśli dla niektórych kolumn o tej samej nazwie typ wartości danych z tabeli źródłowej nie mieści się w tablicy dozwolonych typów kolumny tabeli docelowej, w takich polach otrzymamy puste wartości.
Rozważmy trzeci przypadek. W przypadku kolumn o tej samej nazwie, kolumna tabeli docelowej musi być doprowadzona do pełnej zgodności z kolumną tabeli źródłowej.

Pełna kopia danych dla kolumn z pasującymi nazwami

PodobneKolumny = Nowa tablica();

Dla każdej kolumny z pętli SourceTable.Columns
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Jeśli dopasowana kolumna<>Niezdefiniowane wtedy

// Pobierz właściwości kolumny.
Nazwa = Kolumna.Nazwa;
TypWartosci = Kolumna.TypWartosci;
Tytuł = Kolumna.Tytuł;
Szerokość = Kolumna.Szerokość;

// Zamień kolumny w tabeli docelowej.
Indeks = TableReceiver.Columns.Index(CoincidentColumn);

TableReceiver.Columns.Delete(Indeks);
TableReceiver.Columns.Insert(Indeks, Nazwa, ValueType, Tytuł, Szerokość);

// Dodaj następną nazwę pasujących kolumn do tablicy.
Ta sama nazwaColumns.Add(Kolumna.Nazwa);

EndIf;

Zakończ cykl;

// Przeprowadź pętlę przez wiersze tabeli źródłowej.
Dla każdego wiersza SourceTable From SourceTable Loop

// Dodać Nowa linia do tabeli docelowej.
NewString = TableReceiver.Add();

// Wypełnij wartości w pasujących komórkach.
Dla każdej nazwyKolumny o tej samej nazwieKolumny Loop
Nowy Ciąg[NazwaKolumny] = CiągTabeliŹródłowej[NazwaKolumny];

Zakończ cykl;

Zakończ cykl;


Będziemy musieli wymienić kolumnę w tabeli docelowej na nową, której właściwości będą w pełni odpowiadały kolumnie tabeli źródłowej.
Dlatego jeśli w tabeli adresatów znajduje się kolumna o tej samej nazwie, zbieramy w zmiennych wszystkie właściwości nowej kolumny. Następnie usuń starą i utwórz nową kolumnę. Następnie przechodzimy przez rzędy tabeli źródłowej.
W pętli dodajemy nowy wiersz do tabeli odbiorców i otwieramy pętlę przez nazwy kolumn w tablicy pasujących kolumn.
Wewnątrz tej zagnieżdżonej pętli wypełniamy komórki tabeli odbiorcy danymi komórki tabeli źródłowej.

13. Jak dodać kolumny do tabeli wartości „Tabela wartości” z ograniczeniami typu?

Dodając kolumnę, możesz po prostu określić jej nazwę i nie dotykać drugiego parametru metody Add(). W takim przypadku typ danych kolumny jest dowolny.

Dodawanie kolumny bez określania typu danych

// Dodaj kolumnę bez ograniczeń typu.
ValueTable.Columns.Add("Obiekt");


Możesz wpisać wartość drugiego parametru. W tym miejscu konieczne jest podanie opisu typu dozwolonego dla kolumny. Sam opis można uzyskać za pomocą konstruktora, przekazując nazwę typu ciągu jako parametr do tego ostatniego (jeśli jest wiele typów, to oddzielone przecinkami) lub tablicę poprawnych typów.

Dodanie kolumny określającej typ danych

// Ograniczenia dotyczące typów danych kolumn:
// Tylko elementy katalogu "Kontrahenci".
ValueTable.Columns.Add("Konto", Nowy TypeDescription("ReferenceReference.Accounts"));


Jeśli wśród typów dozwolonych do wypełniania danych w kolumnie znajduje się łańcuch, możesz ograniczyć jego głębię bitową (długość), określić użycie zmiennej lub stałej długości. Wszystko to zapewnia stworzenie obiektu za pomocą konstruktora StringQualifiers. Ponadto ten obiekt będzie używany jako jeden z parametrów konstruktora TypeDescription.

Używanie kwalifikatorów do określenia typu danych kolumny tabeli wartości

// Przygotuj i ustaw limity dla danych typu String.
Kwalifikatory ciągów = Nowe kwalifikatory ciągów (20, długość ważności. Zmienna);
AllowedTypes = NewTypeDescription("String",StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


To samo możesz zrobić dla kwalifikatorów liczby i daty.
Uwaga: opis typu może być zbudowany przez konstruktora zarówno "od zera", jak i możesz użyć istniejącego opisu typu jako podstawy

Używanie istniejących deklaracji typu do określania typu danych kolumny tabeli wartości

// Rozszerzenie poprzednio używanego opisu typów.
Kwalifikatory liczb = Nowe kwalifikatory liczb(10, 2, ValidSign.Non-negative);
DateQualifiers = Nowe DateQualifiers(DateParts.Date);
ExtendedValidTypes = NewTypeDescription(ValidTypes, "Number, Date",NumberQualifiers,DateQualifiers);

ValueTable.Columns.Add("Uwaga", ExtendedAllowedTypes);

Aby uwzględnić pieniądze i towary, w biznesie szeroko stosowane są różne stoły. Prawie każdy dokument to tabela.

Jedna tabela zawiera listę towarów, które mają zostać wysłane z magazynu. W innej tabeli obowiązek zapłaty za te towary.

Dlatego w 1C praca ze stołami zajmuje ważne miejsce.

Tabele w 1C są również nazywane „częściami stołu”. Mają je podręczniki, dokumenty i inne.

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

Pierwsza - szybsza - selekcja, pobieranie z niej wierszy jest możliwe tylko w kolejności. Drugi to wyładowanie wyniku zapytania do tabeli wartości, a następnie losowy dostęp do niego.

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

// pobierz tabelę
Wybór = Query.Execute().Select();
// pomiń wszystkie wiersze wyniku zapytania w kolejności
Podczas gdy Selection.Next() Loop
Raport(Wybór.Nazwa);
Zakończ cykl;

//Opcja 2 - wgranie do tabeli wartości
Query = New Query("SELECT Name FROM Directory.Nomenclature");
// pobierz tabelę
Tabela = Query.Execute().Upload().
// wtedy też możemy ominąć wszystkie linie
Dla każdego wiersza z pętli tabeli
Raport(Ciąg.Nazwa);
Zakończ cykl;
//lub arbitralnie uzyskaj dostęp do ciągów
String = Table.Find("Łopata", "Nazwa");

Ważną cechą jest to, że w tabeli, którą otrzymujemy z wyniku zapytania, wszystkie kolumny będą mocno wpisane. Oznacza to, że żądając pola Nazwa z wyszukiwania Nomenklatury, 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.

Omówiliśmy podstawowe zasady pracy z formami na lekcji i w lekcji na

Postawmy więc tabelę na formularzu. Aby to zrobić, możesz przeciągnąć tabelę z panelu sterowania. Podobnie można wybrać z menu kontrolkę Form/Insert.

Dane mogą być przechowywane w konfiguracji - wówczas należy wybrać istniejącą (wcześniej dodaną) część tabelaryczną obiektu konfiguracji, którego formularz edytujemy.

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

Wybierając część tabelaryczną, sam 1C doda kolumny do tabeli w formularzu. Ciągi wpisane przez użytkownika do takiej tabeli zostaną automatycznie zapisane wraz z katalogiem/dokumentem.

W tej samej właściwości Data można wprowadzić dowolną nazwę i wybrać typ ValueTable.

Oznacza to, że została wybrana arbitralna tabela wartości. Nie doda automatycznie kolumn, nie zostanie automatycznie zapisany, ale możesz z nim zrobić, co chcesz.

Kliknięcie kliknij prawym przyciskiem myszy na stole 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 to dowolna tabela, ale część tabelaryczna jest wybrany).

We właściwościach tabeli na formularzu możesz określić, czy użytkownik może dodawać/usuwać wiersze. Bardziej zaawansowany formularz to pole wyboru ViewOnly. Te właściwości są przydatne do organizowania tabel przeznaczonych do wyświetlania informacji, ale nie do edycji.

Aby zarządzać tabelą, musisz wyświetlić panel poleceń na formularzu. Wybierz pozycję menu Form/Insert Control/Command Panel.

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

Tabela w formularzu (cienki/zarządzany klient)

Na zarządzany formularz te działania wyglądają trochę inaczej. Jeśli chcesz umieścić w formularzu sekcję tabelaryczną, rozwiń gałąź Obiekt i przeciągnij jedną z sekcji tabelarycznych w lewo. I to wszystko!

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

Aby dodać kolumny, użyj menu prawego przycisku myszy na tym atrybucie formularza, pozycji Dodaj kolumnę atrybutu.

Następnie przeciągnij również tabelę w lewo.

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

Eksportowanie 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 wolna przestrzeń w tabeli i wybierz Pokaż listę.

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