Текущее время: Чт, авг 21 2025, 22:27

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Опять про длинный текст в отчеах Bex
СообщениеДобавлено: Чт, окт 12 2006, 14:39 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, авг 10 2006, 06:26
Сообщения: 75
Всем привет.

Опять возник вопрос, ситуация в крадце:
Создала в Bex отчет, затем вставила в него такой же точно отчет. Все это для того, чтобы выполнить функцию по объединению в одну ячейку длинного текста - около 600 символов. Этот большой текст во втором отчете выводится в виде 10 одинаковых признаков в каждой ячейке по 60 символов. Использовала простую функцию Exel If и Concatenate. Затем второй отчет скрыла. Сохранила все как рабочую книгу.
Вопрос: Когда хочешь обновить данные рабочей книги, например просмотреть по другому месяцу и при этом раскрываешь иерархию признака, данные в заданной функции - т.е. объединенный текст выходит не по всем значениям иерархии. А все потому, что второй - скрытый запрос остается то гипотетически с закрытой иерархией.
Вот и возникает вопрос возможно ли сделать так, чтобы функция все таки выполнялась по всем значениям даже если и раскрываешь свою иерархию в отчете. Т.е как то может можно связать запрос в запросе.
А если использовать макросы на VBA может тогда данную ситуацию можно избежать, или это то же самое что и с простой функцией Exel?

Огромное спасибо за ответы.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 12 2006, 16:43 
Ассистент
Ассистент

Зарегистрирован:
Вт, сен 05 2006, 00:33
Сообщения: 36
Откуда: Москва
Может проще будет все в одном запросе выводить и конкатенировать, а скравыть не лист, а только 10 столбцов с текстами.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 13 2006, 07:24 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, авг 10 2006, 06:26
Сообщения: 75
Да, но все в одном запросе выводить не получится, ведь формулы мы можем вставлять в отчетах Bex только после всех Признаков и Показателей. Так что на 10 Признаков я могу ссылаться толко из другого запроса.

Все же вопрос: есть ли большая разница между макросами и простыми формулами Exel в отчетах Bex. Если формула не срабатывает при раскрытии иерархии на новые данне, сработает ли макросы на VBA?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Опять про длинный текст в отчеах Bex
СообщениеДобавлено: Пт, окт 13 2006, 08:58 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, авг 10 2005, 09:24
Сообщения: 1023
Sandra написал(а):
Когда хочешь обновить данные рабочей книги, например просмотреть по другому месяцу и при этом раскрываешь иерархию признака, данные в заданной функции - т.е. объединенный текст выходит не по всем значениям иерархии. А все потому, что второй - скрытый запрос остается то гипотетически с закрытой иерархией.


А может потому, что он не обновился?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, окт 16 2006, 17:55 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Я делал так:
Второй (невидимый) отчет строил над признаком и ограничил иерерархией...
потом искал по ключу тексты и объединял их.

СМ ф-цию Excel "ВПР"

Могу подкинуть макрос, если хочется...

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 17 2006, 06:10 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, авг 10 2006, 06:26
Сообщения: 75
Могу подкинуть макрос, если хочется...[/quote]

Было бы здорово посмотреть на ваш макрос.

Я попробовала уже просто, не делать запрос в запросе, а в тот же запрос вставила все Признаки, на которые нужно ссылаться для формулы "объединение текста". Затем написала макрос, который бы расчитывал формулу и скрывал Признаки, на которые ссылалась в начале.

Но мне это не очень нравится, слишком долго все расчитывается, хочется <я не знать русский языка> и ваш вариант.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 17 2006, 17:47 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Code:
Option Explicit

' Стандартный Trim не обрезает vbCr :(, a BEX при горизонтальной
' развертке добавляет по переводу строки на уровень иерархии

Function RealTrim(Val As String)
    Dim b As Integer
    Dim e As Integer
   
    If Val = "" Then
        RealTrim = ""
        Exit Function
    End If
   
    b = 1
    e = Len(Val)
   
    Do While Mid(Val, b, 1) <= " " And b <= e
        b = b + 1
    Loop
   
    Do While Mid(Val, e, 1) <= " " And e > b
        e = e - 1
    Loop
   
    RealTrim = Mid(Val, b, e - b + 1)
   
End Function

Sub SAPBEXonRefresh(queryID As String, resultArea As Range)
   
    ' Далее нас интересует только один запрос
    If queryID <> "SAPBEXq0003" Then Exit Sub
   
    ' Текст в заголовке ключа
    Const KeyMark = "_Ключ_"
    ' Текст в заголовке атрибута, который заменяем
    '(0TXTLG использовать нельзя, т.к. заголово пуст)
    Const TextMark = "_Описание_"
   
    Dim KeyColCell As Range
    Dim TextColCell As Range
    Dim KeysRange As Range
    Dim TextsRange As Range
    Dim FindCount As Integer
    Dim CurCell As Range
   
    ' Находим значение каждой колонки (или строки)
    Set KeyColCell = resultArea.Find(KeyMark, LookIn:=xlValues, LookAt:=xlWhole)
    If KeyColCell Is Nothing Then
        Debug.Print "Развертка """ & KeyMark & """ не найдена"
        Exit Sub
    End If
   
    Set TextColCell = resultArea.Find(TextMark, LookIn:=xlValues, LookAt:=xlWhole)
    If TextColCell Is Nothing Then
        Debug.Print "Развертка """ & TextMark & """ не найдена"
        Exit Sub
    End If
   
    If TextColCell.Column = KeyColCell.Column Then
        'Axis = "X"
        Set KeysRange = Intersect(resultArea, KeyColCell.EntireRow)
        Set TextsRange = Intersect(resultArea, TextColCell.EntireRow)
    Else
        If TextColCell.Row = KeyColCell.Row Then
            'Axis = "Y"
            Set KeysRange = Intersect(resultArea, KeyColCell.EntireColumn)
            Set TextsRange = Intersect(resultArea, TextColCell.EntireColumn)
        Else
            Debug.Print "Неизвестное состояние отчета"
            Exit Sub
        End If
    End If
   
    Dim SrcKeysRange As Range
    Dim KeyCell As Range
    Set SrcKeysRange = Names("SAPBEXqueries!SAPBEXq0002").RefersToRange.Columns(1)
   
    Dim CO As Integer
    Dim RO As Integer
   
    CO = KeysRange.Cells(1, 1).Column - 1
    RO = KeysRange.Cells(1, 1).Row - 1
   
    Dim Text As String
    Dim i As Integer
   
    For Each CurCell In KeysRange
       
        Set KeyCell = SrcKeysRange.Find(RealTrim(CurCell.Value), LookIn:=xlValues, LookAt:=xlWhole)
        If KeyCell Is Nothing Then
            Debug.Print "Ключ  """ & RealTrim(CurCell.Value) & """ не найден"
        Else
            i = 2
            Text = "'"
            Do While KeyCell.Cells(1, i).Value <> "#" And i < 15
                Text = Text & Left(KeyCell.Cells(1, i).Value & Space(60), 60)
                i = i + 1
            Loop
            TextsRange.Cells(CurCell.Row - RO, CurCell.Column - CO).Value = Trim(Text)
        End If
   
    Next CurCell
End Sub


В общем пока не совершенно, но позволяет спокойно менять ракурсы.

Замечания :

Отчет работал на ~ 500 строках приемлемо по скорости. "Благодаря" Find на больших объемах данных д.б. задержка.
(лечить: бинарным поиском)

Не обновляется связный отчет.
(лечить: поставить принудительное обновление если связный отчет не обновлялся более, ну скажем, 2-х часов)

"Не показывать ключ" и иерархии - вещи не совместимые.
(не знаю как лечить)

Хотелось бы привязываться не к заголовкам, а к данным на SAPBExQueries.
(мало на свете людей способных по данным с SAPBExQueries вычислить колонку или строку с данными)

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 18 2006, 07:19 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, авг 10 2006, 06:26
Сообщения: 75
2 G: Спасибо за макрос, но не могли бы вы сказать, к какому событию ваш код привязан?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 19 2006, 10:24 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Да оно одно создается при вставке любого запроса.
Модуль SAPBEX

Code:
Sub SAPBEXonRefresh(queryID As String, resultArea As Range)
End Sub


Некоторая справка по взаимодействию BEX и Excel.

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 19 2006, 10:43 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, авг 10 2006, 06:26
Сообщения: 75
G огромное спасибо, вы очень помогли


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 19 2006, 16:04 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Не за что!
Если получится улучшить что-нибудь -- буду рад посмотреть :)

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB