Текущее время: Сб, июл 26 2025, 11:36

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


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

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


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

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