Различия

Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.

Ссылка на это сравнение

ru:manual:report:use_macros_in_reports:plus_one_year [2013/07/15 12:09]
admin
— (текущий)
Строка 1: Строка 1:
-====== Прибавление года к указанной дате ====== 
- 
-===== Постановка задачи ===== 
-В отчете от процесса в таблице со списком статусов процесса необходимо добавить столбец, который будет иметь дату бОльшую на год от даты "Дата изменения статуса" в одноименном столбце. Название этого столбца "Срок деятельности". Формат даты представлен как "дд.мм.гг". 
- 
-===== Исходное состояние ===== 
-Решение описывается с момента, когда в шаблоне отчета создана необходимая привязка типа Список.  
- 
-[{{ ru:manual:report:use_macros_in_reports:plus_one_year:dateplus1.png?nolink |Рисунок 1. Исходный вид привязок в шаблоне отчета}}] 
- 
-===== Концепция решения =====  
-В шаблоне к необходимой таблице вручную добавляется столбец с заголовком "Срок деятельности". Кодом VBA анализируется дата в каждой ячейки столбца "Дата изменения статуса" и в соседнюю ячейку вставляется дата с увеличенной датой на год. 
- 
-===== Шаги решения ===== 
- 
-Дополнительный столбец добавляется в конец таблицы стандартными средствами Word.  
- 
-[{{ ru:manual:report:use_macros_in_reports:plus_one_year:dateplus2.png?nolink |Рисунок 2. Вид привязки типа список после добавления столбца "Срок действия"}}] 
- 
-Кодом VBA реализуется: 
- 
-  * обращение к необходимой таблице по названию привязки, 
-  * чтение дат в каждой ячейке столбца "Дата изменения статуса", 
-  * вставка измененной на год даты в каждой ячейке столбца "Срок действия". 
- 
-При работе с датой следует помнить, что она определена как текстовый тип данных. 
- 
-Определяем название привязки типа "Список", которая представляет нужную таблицу. (см. [[ru/manual/report/insert_anchor?&#пример_определения_названия_привязки_типа_список ]]) 
- 
-<code vb> 
-Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) 
-  
-'Вводная часть 
-      
-    'название закладки для привязи типа Список, формирующей нужную таблицу 
-    StatusBookmarksName = "Изменения_процесса_e1ded8b0" 
-    columnDate = 4 'столбец в таблице, содержащий исходную дату 
-       
-         
-        'Проверка на корректность названия привязки 
-        Dim StatusOk As Boolean 'храним данные о том, что наша закладка есть в отчете 
-        StatusOk = False 'сначала считаем, что нужной закладки нет 
-         
-           
-        Dim Bkm As Bookmark 'переменная типа Закладка 
-         
-           
-        'если искомая закладка есть среди закладок в документе 
-        For Each Bkm In ActiveDocument.Bookmarks 
-          
-            If Bkm.Name = StatusBookmarksName Then 
-             
-                StatusOk = True 'отмечаем, что закладка есть 
-                'будем работать с таблицей через закладку 
-                Set tableStatus = Application.ActiveDocument.Bookmarks(StatusBookmarksName).Range.Tables(1) 
-              
-            End If 
-              
-        Next 
-             
-'Процедурная  часть 
-      
-    If StatusOk Then 'если есть необходимая закладка 
-      
-       
-        countTableStatus = tableStatus.Rows.Count 'количество строк таблицы 
-       
-       
-        For i = 2 To countTableStatus 'будем проходить по всем строкам таблицы кроме первой 
-          
-          
-            dateEdit = tableStatus.Cell(i, columnDate).Range.Text 'получаем значение даты из ячейки 
-             
-            dateEditLen = Len(dateEdit) 'длина текста 
-      
-      
-            If dateEditLen > 1 Then 'если не пусто 
-     
-      
-                dateEdit = Left$(dateEdit, (dateEditLen - 2)) 'удаляем 2 последних служебных символа ячейка, получаем чистый текст 
-                 
-                yearValidText = Right$(dateEdit, 2) 'берем 2 последние цифры года 
-                yearValidDigit = CInt(yearValidText) + 1 'превращаем текст в целое число + 1 год 
-                 
-                  
-                If yearValidDigit < 10 Then 'если год до 10 (т.е. не двузначное) 
-                  
-                  
-                    yearValidText = "0" + CStr(yearValidDigit) 'дата текстом = 0 + число 
-                   
-                   
-                Else 
-                  
-                    yearValidText = CStr(yearValidDigit) 'иначе просто дата текстом 
-                  
-                  
-                End If 
-                 
-                ddmmValid = Left$(dateEdit, (Len(dateEdit) - 2)) 'берем от исходной даты все, кроме 2х последних символов (год) 
-                 
-                dateValidText = ddmmValid + yearValidText 'дата проверки = дд.мм. + гг 
-                 
-                tableStatus.Cell(i, columnDate + 1).Range.Text = dateValidText 'заносим текст в ячейку "Срок действия" 
-      
-       
-            End If 
-     
-        Next i 
-         
-    End If 
-     
-End Sub 
- 
-</code>   
- 
-===== Результат ===== 
-[{{ ru:manual:report:use_macros_in_reports:plus_one_year:dateplus3.png?nolink |Рисунок 3. Вид отчета после выполнения}}] 
  
Актуальные новости, публикации и практики для бизнес-архитекторов и аналитиков
Driven by DokuWiki