ACS to nie tylko raporty - realizacja uniwersalnych selekcji. Używanie selekcji w SCD Jak dokonywać selekcji bez SDS

Aby zapisać przetwarzanie, programiści często musieli używać zapytań w celu uzyskania danych, a następnie ich przetworzenia. Dane z kolei uzyskano z zapytania. Cóż, żądanie bez wyboru lub filtra jest rzadkie. Porozmawiajmy o selekcjach w takich żądaniach, korzystając z przykładowego żądania:

Aby zorganizować wybór kontrahenta dla użytkownika w zwykłej formie, programista musiał umieścić na formularzu trzy elementy, które wyglądały mniej więcej tak:

Ile wysiłku wymaga programista, aby opisać różne typy porównań (równe, nierówne, na liście, w grupie...) i na podstawie tego typu porównań udoskonalić swoje ostateczne żądanie uzyskania danych.

Przyjrzyjmy się, jak można to zrobić za pomocą ACS. W naszym przetwarzaniu stwórzmy Layout o typie Data Composition Scheme i wypełnijmy go naszym żądaniem:

Na zakładce Ustawienia dodamy nowe grupowanie bez szczegółów i w naszym przykładzie pole Konto, gdyż ostatecznie wszystko przeniesiemy do tabeli wartości:

Następnie w zakładce Wybór dodaj Kontrahenta do wyboru:

Teraz zacznijmy tworzyć formularz. Wyświetlmy na formularzu samego przetwarzania Wybór, z którym użytkownik będzie pracował. Na formularzu wyświetlimy element typu Table Field i nadamy mu nazwę Selection z typem danych Composer.Settings.Selection:

Stwórzmy teraz procedury obsługi zdarzeń dla formularza OnOpen oraz obsługi kliknięcia przycisku Uruchom, kod prezentujemy poniżej:

Układ Perema; Procedura PrzyciskWykonajNaciśnij(Przycisk) Wynik.Wyczyść(); LayoutLinker = newDataLayoutLayoutLinker; Layout Layout = Layout Composer.Execute(Layout, Composer.GetSettings(), Type("DataCompositionLayoutGeneratorForValueCollection")); CompositionProcessor = newDataCompositionProcessor; LayoutProcessor.Initialize(LayoutLayout); Procesor wyjściowy = nowy procesor wyjściowy wyniku złożenia danych w zbiór wartości; OutputProcessor.SetObject(Result); OutputProcessor.Output(CompositionProcessor); Jeśli FormElements.Result.Columns.Quantity() = 0, to FormElements.Result.CreateColumns(); koniecJeśli; EndProcedure ProceduraOnOpen() Układ = GetLayout("Układ"); SourceAvailableSettings = New SourceAvailableSettingsDataComposition (Układ); Linker.Initialize(SourceAvailableSettings); Linker.LoadSettings(Layout.DefaultSettings); Koniec procedury

Przetwarzanie jest gotowe, po jego uruchomieniu od razu widać w naszej Selekcji Kontrahenta, który pojawił się w naszej Selekcji, z którego można wybrać dowolny rodzaj porównania, a także dodać dodatkowe linie selekcji korzystając ze szczegółów katalogu Kontrahenci:

To wszystko. Mam nadzieję, że ten artykuł pomoże Ci poprawić elastyczność selekcji w przetwarzaniu.

Kononow Siergiej

Do czego można wykorzystać SKD?

Ustalona opinia służy celom sprawozdawczym.

W rzeczywistości Możliwości ACS wykraczają poza tworzenie uniwersalnych raportów.

A dzisiaj pokażemy jak korzystając z systemu kontroli dostępu użytkownik będzie mógł skonfigurować elastyczny dobór danych. Ponadto wybór ten zostanie wykorzystany podczas uzyskiwania i przetwarzania danych.

Do jakich zadań będzie to przydatne?

Dajmy przykłady z typowych konfiguracji:

  • Przetwarzanie „Przesyłania danych do serwisu”
  • Tworzenie cennika
  • Przesyłanie danych do TSD (terminal gromadzenia danych)
  • Segmentacja produktów, partnerów
  • Tworzenie zamówień (klientów, dostawców) według potrzeb
  • Planowanie napraw w 1C:ERP.

Oznacza to, że narzędzie przyda się wszędzie tam, gdzie konieczne jest zapewnienie użytkownikowi szerokich możliwości wyboru.

Tworzenie losowej selekcji w kontrolowanej formie za pomocą ACS

Lekcja obejmuje pracę z kreator ustawień schematy układu danych:

  • Dane wyjściowe wyboru w formularzu
  • Połączenie programowe pomiędzy kreatorem ustawień a schematem układu
  • Tworzenie domyślnych selekcji w systemie kontroli dostępu.

Odbiór danych z bazy danych z filtracją według wyboru ACS

Film pokazuje, jak wybrać dane, korzystając z wcześniej ustawionego wyboru w kreatorze ustawień.

Używany jest „przerażający” przedmiot – ProcessorOutputResultCompositionDataIntoValueCollection.

Tak naprawdę nie wszystko jest takie skomplikowane – w 8 minut rozwiązujemy problem.

Zapisywanie wyborów SKD w bazie informacji

Na lekcji przyjrzymy się zapisywanie ustawień kreatora ACS za pomocą magazynu wartości.

Zastanówmy się, jak rozwiązać ten problem w konfiguracji „1C: Manufacturing Enterprise Management 1.3”.

Miłego oglądania! :)

Generalnie ACS daje mnóstwo możliwości.

Oto kilka „trików”, których nawet nie mieliśmy czasu opisać na stronie kursu.

Jeśli chcesz zebrać dane z różnych źródeł, są trzy opcje.

Można spróbować ułożyć jedno „uniwersalne” zapytanie dla wszystkich danych (długie), można wyświetlić dane z kilku zapytań w pętli (sztywna, nieelastyczna struktura) - lub można po prostu użyć ACS i łączenie zbiorów danych zamiast jednej prośby.

Jednocześnie ważne jest uzyskanie poprawnych wyników - ma to swoją specyfikę, jeśli istnieje kilka źródeł

Z pomocą SKD jest to po prostu możliwe uzyskaj migawkę najnowszych danych dla każdej daty w raporcie.

Lub, dla jasności, - uzyskaj cenę produktu dla każdej daty sprzedaży.

Z pomocą ACS możesz organizować wyświetlenie w raporcie wszystkich dat za okres, a nie tylko te, dla których w raporcie były dane (dodawanie dat bez programowania, tylko z możliwościami systemu kontroli dostępu)

Za pomocą ACS możesz organizować zagnieżdżone grupowania z dodawaniem okresów (rok/kwartał/miesiąc itp.)

Ułóż raport według potrzeb, na przykład wyświetl nagłówek kolumny w pionie, a dane w tej kolumnie w poziomie.

Pozwól użytkownikowi wybrać częstotliwość wyświetlania danych w raporcie (rok, kwartał, miesiąc) - wyłącznie poprzez ustawienia, bez konieczności edycji modułu raportowego.

Jak połączyć kilka warunków za pomocą OR w raporcie? Ta opcja nie jest na przykład dostępna w kreatorze raportów, ale jest dostępna w ACS

Jeśli wyświetlasz dane podsumowujące w formie wykresu, musisz mieć możliwość precyzyjnej kontroli nad ich wyglądem: widocznością znaczników serii, naprzemienną kolorystyką serii wykresów, oddzieleniem danych przeszłych od przyszłych na wykresie linią pionową itp.

Oczywiście istnieją niuanse, na które należy zwrócić uwagę.

Podczas tworzenia raportu programista debugował tekst zapytania, ale podczas używania tego zapytania w raporcie w systemie kontroli dostępu system generuje nieprawidłowy wynik.

Dlatego ważne jest, aby móc uzyskać zapytanie, które system faktycznie wykonuje w celu pobrania danych z bazy, i zdebugować takie zapytanie.

Podczas dodawania szczegółów do rejestratora dokumentów do raportu, system czasami generuje „nieprawidłowe” salda otwarcia i zamknięcia.

Dlatego ważne jest prawidłowe skonfigurowanie pól w raporcie w systemie kontroli dostępu, tak aby salda wyświetlały się poprawnie zarówno z szczegółami dokumentu, jak i bez nich.

Wynik raportu może się zmieniać w zależności od tego, gdzie skonfigurowany jest wybór według wartości zasobu – na poziomie raportu i na poziomie pojedynczej grupy należy to monitorować.

Jeśli chcesz profesjonalnie opanuj ACS i codziennie zastosować w swojej pracy, zapisz się na kurs:

Wsparcie - 2 miesiące. Zakres kursu – 34 godziny dydaktyczne.

Nie zwlekaj ze studiami!

Rozszerzenie języka zapytań dla systemu kompozycji danych

Rozszerzenie języka zapytań dla systemu składu danych odbywa się za pomocą specjalnych instrukcji syntaktycznych ujętych w nawiasy klamrowe i umieszczonych bezpośrednio w tekście zapytania.

Elementy syntaktyczne rozszerzenia języka zapytań systemu składu danych

WYBIERAĆ

To zdanie opisuje pola, które użytkownik będzie mógł wybrać jako dane wyjściowe. Po tym słowie kluczowym wyświetlane są aliasy pól z głównej listy wyboru zapytania, które będą dostępne do konfiguracji, oddzielone przecinkami.

Na przykład:

(WYBIERZ artykuł, Magazyn)

Po aliasie pola może wystąpić kombinacja znaków „.*”, która wskazuje na możliwość wykorzystania pól podrzędnych z tego pola.

Przykładowo wpis Nomenklatura.* wskazuje na możliwość wykorzystania pól podrzędnych pola „Nomenklatura” (np. pole „Nomenklatura.Kod”). Element SELECT może pojawić się tylko w pierwszym zapytaniu łączącym.

GDZIE

Opisano pola, na których użytkownik może dokonać selekcji. Ta propozycja wykorzystuje pola tabeli. Niedozwolone jest używanie aliasów pól listy wyboru. Każda część unii może zawierać własny element WHERE.

(Nomenklatura GDZIE.*, Magazyn)

Prosty przykład

Konieczne jest uzyskanie sprzedaży za dany okres + wyświetlenie całej pozycji, niezależnie od tego, czy była sprzedaż, czy nie. Oznacza to, że musisz wybrać dane z tabeli obrotów rejestru sprzedaży, dane z katalogu nomenklatury. Pomińmy pytanie, po co nam ta cała nomenklatura.

Aby rozwiązać problem można utworzyć zapytanie łączące towar z tabelą Obroty sprzedaży złączem lewym, w efekcie dla towaru, który nie został sprzedany w wybranym okresie otrzymamy wartości pól Kontrahent, Porozumienie, Ilość, Suma= Zero. Ta prośba:

WYBIERZ Nomenklaturę referencyjną.Link AS Nomenklatura, Obrót sprzedaży.Kontrahent, Obrót sprzedaży.Umowa kontrahenta, Obrót sprzedaży.QuantityObrót AS Ilość, Obrót sprzedaży.KosztObrót AS Koszt Z Referencja.Nomenklatura AS Nomenklatura referencyjna LEWE POŁĄCZENIE Zarejestruj Akumulacje.Sprzedaż.Obrót AS SprzedażObrót PO SprNomenklatura.Link = SalesTurno wer. Nomenklatura

Oto wynik:

Kontrahent Porozumienie Nomenklatura Ilość Suma
zero zero _Test1 zero zero
LLC „Rogi i kopyta” Umowa 1 Kapcie 10 1200
„Gazprom” Fajny kontrakt Buty 5 13000
zero zero Kalosze zero zero
zero zero Łupki zero zero

W tym przykładzie nie było sprzedaży artykułów: „Ochronniki” i „Kapcie”

I wszystko byłoby w porządku, jeśli pogrupujemy próbę według kontrahenta, to wszystkie niesprzedane pozycje wpadną do osobnej grupy, gdzie Kontrahent = Null, ale klient chce mieć w raporcie losowy wybór po polu kontrahenta (oczywiście to oznacza kontrahenta z Rejestru Sprzedaży). Co powinienem zrobić? W końcu tak naprawdę wystarczy tylko przefiltrować tabelę Obroty. Jeśli w konstruktorze ACS zastosujemy autouzupełnianie, wówczas dostępne pola wyboru obejmą pole Kontrahent, wszystko wydaje się być w porządku, jednak wykonując raport z wyborem po kontrahentu, stracimy wszystkie zapisy z powiązania z towarem. Na przykład ustawmy wybór: Kontrahent = LLC „Rogi i kopyta”. Wynik będzie wyglądał następująco:

Zupełnie nie tego, czego potrzebujemy, prawda?

Aby rozwiązać problem, możesz oczywiście dodać parametr do zapytania, na przykład do parametrów wirtualnej tabeli Obrót sprzedaży, ale jednocześnie traci się elastyczność w ustalaniu rodzaju porównania.

Istnieje rozwiązanie: w tym celu konstruktor zapytań na karcie Skład danych => Stoły dodaj pole warunku do warunków tabeli wirtualnej Obrót sprzedaży i zmień jego nick na Wybór Kontrahenta

Aby nie mylić użytkownika z polami wyboru, wyłączymy pole warunku Kontrahent i zmień tytuł pola Wybór Kontrahenta


W wyniku wykonania tego schematu z możliwością selekcji w polu kontrahenta, wynikowe zapytanie będzie miało postać:

WYBIERZ Nomenklaturę Spr.Link AS Nomenklatura, Obrót sprzedaży.Kontrahent AS Kontrahent, Obrót sprzedaży.Umowa z kontrahentem Jako Umowa z kontrahentem, Obrót sprzedaży.QuantityTurnover AS >Ilość, Obrót sprzedaży.KosztObrót AS Koszt, PREZENTACJALINK(Obrót sprzedaży.Umowa z kontrahentem) AS Kontrahent kontraktu aPrezentacja, PREZENTACJALINK(Obrót sprzedaży .Kontrahent ) AS CounterpartyPrezentacja, SprNomenklatura.Prezentacja AS NomenklaturaPrezentacja Z Katalogu.Nomenklatura AS SprNomenklatura LEWE POŁĄCZENIE Rejestr Akumulacje.Sprzedaż.Obrót(&P , , , Kontrahent = &P3 ) AS Obrót sprzedaży BY SprNomenklatura.Link = Nomenklatura Obrotu Sprzedaży

I odpowiednio wynik:

Kontrahent Porozumienie Nomenklatura Ilość Suma
zero zero _Test1 zero zero
LLC „Rogi i kopyta” Umowa 1 Kapcie 10 1200
zero zero Buty zero zero
zero zero Kalosze zero zero
zero zero Łupki zero zero

Test1 to grupa w katalogu Nomenklatury, w której wszystko się znajduje

Do publikacji dołączony jest schemat XML raportu użytego w publikacji. Układ stworzyłem w Integrated Automation, ale myślę, że wszystko będzie działać dobrze zarówno w UPP, jak i UT 10

Zreasumowanie

Ten przykład pokazuje, jak utworzyć własne ustawienia wyboru w systemie kontroli dostępu i wyłączyć te utworzone automatycznie, jeśli projektujesz obwód z włączoną flagą autouzupełnienie.

Jeśli masz wystarczające doświadczenie, aby tworzyć obwody bez użycia Automatyczne uzupełnianie- wtedy ta rada nie ma sensu.

Używane oprogramowanie

  • Program do robienia zrzutów ekranuSnimOK!
  • Edytor plików XML