Текущее время: Вс, июл 27 2025, 16:59

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


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Номер материала в EXCEL.
СообщениеДобавлено: Ср, авг 15 2007, 13:59 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, мар 22 2007, 10:43
Сообщения: 67
Пол: Мужской
Здравствуйте.
Подскажите, кто сталкивался с такой проблемой:
При выгрузке в эксель 18 значного номера материала "зануляются" последние 3 цифры.
Пробовали 2 способа:
1) выгружали внутр. табл. в текстовый файл при помощи 'WS_DOWNLOAD', текст открывали в экселе, что то типа

Code:
CREATE OBJECT excel 'excel.application'.
CALL METHOD OF excel 'Workbooks' = books.
  CALL METHOD OF books 'Open' = books1
     EXPORTING
                   #1 = имя файла
                   #2 =

....
2) при помощи
CALL FUNCTION 'RH_START_EXCEL_WITH_DATA'
TABLES
DATA_TAB = itab
открыли данные в эксель.
В обоих случаях № материала из 410000000000001234 превращается
в 410000000000001000. Как это предотвратить.
Может кто подскажет как написать макрос на АВАР, кот-й в VBA выглядит следующим образом:

Code:
Sub Mac1

    Workbooks.OpenText Filename:= _
        "C:\ZZDOG_TEMP.txt" _
        , Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
        :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _
        False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 2), Array(4, 2)), TrailingMinusNumbers:=True

End Sub


Заранее благодарен.


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

Зарегистрирован:
Пт, фев 17 2006, 07:38
Сообщения: 99
На ABAP такой вызов реализовать не смог, т.к. не получилось создавать массивы, но я поступил следующим образом - перед номером материала ставится апостроф ', в этом случае содержимое ячейки считается текстовым. Открывал сохранённый на клиенте файл через вызов
Code:
      CALL METHOD OF f_workbooks 'OpenText'
        EXPORTING
        #1 = data_file_name_c           " FileName
        #2 = 2                          " Origin
        #3 = 1                          " StartRow
        #4 = 1                          " DataType
        #5 = -4142                      " TextQualifier = xlTextQualifierNone
        #6 = 0                          " ConsecutiveDelimiter
        #7 = 1.                         " Tab = True

Потом, чтобы этот апостроф не отображался в екселе заменял апостроф на апостроф ;)
Code:
      GET PROPERTY OF f_data_sheet 'UsedRange' = range.
      CALL METHOD OF range 'Replace'
        EXPORTING
        #1 = ''''
        #2 = ''''.

Надеюсь это вам поможет. Если что-то непонятно - спрашивайте.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 15 2007, 14:34 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Дело в том, что когда Excel открывает текстовый файл, он анализирует содержимое ячейки и выбирает соответствующий формат ячейки.
В данном случае, поскольку строка состоит только из цифр, он думает, что это число, но не думает о длине. А когда он вспоминает про длину, то уже поздно — произошло округление.

Лечится это, например, так. Присоединяете более-менее нейтральный символ в конец артикула, например, 0xA0. А потом макросом удаляете этот символ со всего листа.

Параметр FieldInfo, по-моему, из ABAP не передать...
Но никто не мешает макрос сохранить в шаблоне Excel, выгружать его в tmp и вызывать оттуда макросы для обработки текущего файла, как это сделано в разработке Parazit'а.


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

Зарегистрирован:
Чт, мар 22 2007, 10:43
Сообщения: 67
Пол: Мужской
Цитата:
Потом, чтобы этот апостроф не отображался в екселе заменял апостроф на апостроф ;)
[code] GET PROPERTY OF f_data_sheet 'UsedRange' = range.
CALL METHOD OF range 'Replace'
EXPORTING
#1 = ''''
#2 = ''''.

Надеюсь это вам поможет. Если что-то непонятно - спрашивайте.

При замене апостроф на апостроф апостров остается в содержимом ячейки. А нам надо в последствии считать данные, и апостроф будет мешаться. При замене апострофа на пробел последние цифры зануляются. В общем ни так ни эдак.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 15 2007, 16:18 
Начинающий
Начинающий

Зарегистрирован:
Вт, июл 19 2005, 11:17
Сообщения: 10
Попробуй так: подавать в ексель ='4000000134'


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, авг 15 2007, 20:18 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
alex95043 написал:
При замене апостроф на апостроф апостров остается в содержимом ячейки. А нам надо в последствии считать данные, и апостроф будет мешаться. При замене апострофа на пробел последние цифры зануляются. В общем ни так ни эдак.


Попробуйте символ с кодом 160 в Win кодировке. Он отображается как пробел и в глаза не бросается.
По крайней мере строка
410000000000001234 ;410000000000001234 ;410000000000001234 
в *.csv файле загрузилась без преобразований. Через SAP не проверял.
Для молодого поколения, символы по коду вводятся как ALT + номер символа на цифровой клавиатуре ;-)


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

Зарегистрирован:
Пт, фев 17 2006, 07:38
Сообщения: 99
alex95043 написал:
При замене апостроф на апостроф апостров остается в содержимом ячейки. А нам надо в последствии считать данные, и апостроф будет мешаться. При замене апострофа на пробел последние цифры зануляются. В общем ни так ни эдак.

Если данные считывать через выгрузку в текстовый файл, то апострофы туда уже не попадают, если обрабатывать через макросы, то апострофы тоже отбрысываюся.
Чтобы убедиться, попробуйте выполнить этот макрос для ячейки в которую занесено значение с апострофом в начале.
Code:
Sub a()
    MsgBox ("_" & ActiveSheet.Cells(9, 1).Value & "_")
End Sub


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

Зарегистрирован:
Чт, мар 22 2007, 10:43
Сообщения: 67
Пол: Мужской
vahtang написал(а):
Если данные считывать через выгрузку в текстовый файл, то апострофы туда уже не попадают, если обрабатывать через макросы, то апострофы тоже отбрысываюся.

Да действительно, при выгрузке в текстовый файл апострофов нет. Большое спасибо. Ещё вопрос нерешенный остался. На листе Excel необходимо выделить ячеки с 1 до последней строки. Макрос выглядит так:
Code:
    Range("A1:C1").Select
    Range(Selection, Selection.End(xlDown)).Select

Можно ли написать что то подобное на ABAP ?


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

Зарегистрирован:
Пт, фев 17 2006, 07:38
Сообщения: 99
А что вы собираетесь делать потом с этим выделением?
Чтобы просто выделить весь диапазон содержащий значения можно использовать свойство листа UsedRange.
Code:
GET PROPERTY OF f_data_sheet 'UsedRange' = range.
CALL METHOD OF range 'Select'.

Выделение диапазона это больше интерактивная операция, и для доступа к данным в не очень нужна, посмотрите помощь в Excel по Visual Basic, там достаточно всё просто. Правда реализация на ABAP'е доступа через OLE получается многословной.


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

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
можно попробовать описание в schema.ini


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

Зарегистрирован:
Чт, мар 22 2007, 10:43
Сообщения: 67
Пол: Мужской
Задача выглядит так.
Выгружаются данные в текстовый файл. Далее файл открывается в экселе. Открывается 2-й файл, куда будут садиться данные. Из 1 го файла поочередно выделяется некоторый диапазон (напр-р А1-С1, до последней записи), и сажается во 2-й файл. И так несколько раз. Решили что так будет работать гораздо быстрее, чем выгрузка в шаблон.
Нашел отличную идею - написание текста макроса в программе, и передача его в файл эксель. Может кому пригодиться.
https://www.sdn.sap.com/irj/sdn/thread?threadID=177332


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

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


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

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


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

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