Текущее время: Ср, ноя 05 2025, 23:07

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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