Это старая версия документа.
В отчете формата Word по всем субъектам необходимо решить 2 задачи:
Бывают ситуации, когда необходимо выводить значения некоторых параметров у объектов. При этом значения некоторых из этих параметров могут быть не заполнены. В свойствах объектов это видно и понятно, а в отчетах может быть не столь очевидным. Поэтому, будет полезно вместо пустого значения выводить какое-то пояснение.
В таблице, в которой выводится количество должностей по категориям, необходимо указать текст "Категория должности не выбрана".
В отчете существует привязка типа "Фильтр", которая выводит информацию о том, какие категории должностей есть у должностей, а также их количество. Так же показывается количество должностей, у которых категория не выбрана.
Для должностей, у которых категория не выбрана, название категории пустое.
Необходимо определить длину текста для каждой ячейки 2го столбца таблицы. Если длина 2 символа (т.е. только 2 служебных символа), то в эту ячейку необходимо вставить указанный текст.
Управлять отображением данных можно как в фильтрах, так и в настройках привязок. Например, сортировку можно указать для списков как в фильтре, так и в настройках сложной привязки, задав направление сортировки и параметр, по которому будет происходить сортировка. При этом, бывают случаи, когда для вывода информации используется несколько фильтров и задание направления сортировки средствами Business Studio невозможно.
В таблице, которая выводит информацию о количестве процессов, с которыми связаны должности, необходимо сделать сортировку по столбцу с количеством процессов – от наибольшего к наименьшему.
В отчете существует привязка типа "Фильтр", которая выводит список должностей, имеющих хотя бы одну связь с процессами. В параметрах этой привязки задана другая привязка типа "Фильтр", которая выводит количество должностей, с которыми связана конкретная должность.
Установка задания условий сортировки по каким-либо параметрам не дает ожидаемый результат – сортировку по количеству процессов должностей.
В Word имеется функционал для сортировки данных в таблицах (лента "Макет"). Мы сделаем то же самое, но кодом VBA.
Для ситуации, когда у разных должностей будет одинаковое количество процессов, необходимо будет сделать так сортировку должностей по алфавиту. Это будет второй столбец сортировки. Будет считать, что она находится перед столбцом с количеством процессов.
После проведенной сортировки столбец с нумерацией не будет соответствовать действительности. Поэтому, необходимо для каждой ячейки этого столбца проставить последовательную нумерацию.
Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) Call AddTextCleanRow Call Sorting End Sub Sub AddTextCleanRow() сняющий текст в пустые строки таблиц 'по типам подразделенкст в пустые строки таблиц okmarkName As String 'название привязки нужной татегориям должностей в_по__c209c161" ЧАСТЬ Dim BookmarkName As String столбца где пустая ячейка NeedColu нужной таблицы BookmarkName = "Количество_субъектов_по__c209c161" Dim NeedColumn As Integer еменные Dim TypeSubjectTable As T пустая ячейка NeedColumn = 2 Dim TypeSubjectTextIns As String Then 'если в докумевставки TypeSubjectTextIns = "(Категория должности не указана)" ation.ActiveDocument.Bеременные Dim TypeSubjectTable As Table Dim RangeCell As Range bjectTable.Rows.CouАЯ ЧАСТЬ If BookmarkIs(BookmarkName) Then ntRow 'проходимся по всем строказакладка есть Next 'игнор error 5991, если какие-то яазванию привязки Set TypeSubjectTable = Application.ActiveDocument.Bookmarks(BookmarkName).Range.Tables(1) countRow = TypeSubjectTable.Rows.Count в ячейке только 2 служебнрок таблицы For i = 2 To countRow ем текст в ячейке RangeCстрокам таблицы On Error Resume Next eCell.Text = TypeSubjectTextIns End If Next i End If En вертикальное объединение Set RangeCell = TypeSubjectTable.Cell(i, NeedColumn).Range Задаем ключевыечейка If Len(RangeCell.Text) = 2 Then цессов_у_Должно_30007b7b" Dim ColumnFirst As Integer 'номераимвола, т.е. ячейка пустая еременные Dim SortingTa в ячейке RangeCell.Select Selection.SelectCell RangeCell.Text = TypeSubjectTextIns End If Next i End If End Sub Sub Sorting() gTable = Application.ActiveDocument.Bookmarks(Bookmaу данных в нужных полях таблицу 'Сначала по столбцу с колиству по убыванию 'Затем НАЯ цу с название должностей -ые значения Dim BookmarkName As String BookmarkName = "Колво_процессов_у_Должно_30007b7b" Dim ColumnFirst As Integer rtFieldNumeric, _ SortOrder:=wервой сортировки ColumnFirst = 3 олбцам " & Str(ColumnFеременные Dim SortingTable As Table Dim TextNumber As String SortOrder2:=wdSortАЯ ЧАСТЬ If BookmarkIs(BookmarkName) Then ountRow = SortingTable.Rows.Counзакладка есть r i = 2 To countRow Teазванию привязки Set SortingTable = Application.ActiveDocument.Bookmarks(BookmarkName).Range.Tables(1) Sorti таблицу ange.Text = TextNumber 'вставляем номер Next i о процессов - по убыванию e As String) As Boolean 'Проверка на корректность назолжностей - по алфавиту SortingTable.Sort _ ExcludeHeader:=True, _ FieldNumber:="столбцам " & Str(ColumnFirst), _ SortFieldType:=wdSortFieldNumeric, _ SortOrder:=wdSortOrderDescending, _ FieldNumber2:="столбцам " & Str(ColumnFirst - 1), _ SortFieldType2:=wdSortFieldAlphanumeric, _ Sort