Текущее время: Пн, июл 28 2025, 00:14

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 22 2005, 15:58 
Гость
0 :)


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 22 2005, 16:28 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
nicky555 написал:
EGF написал(а):
Правильный ответ: #3.
Дело в том, что переменные gt_labst и gt_labst_copy являются указателями на объект памяти (memory object), который в нашем случае представлен телом внутренней таблицы.
...

Боюсь, с точки зрения системы версии до 4.6С включительно это неверно.
Автор, видимо, путает понятия внутренней таблицы и ссылки на таблицу (field-symbols). То есть, присваивая переменной внутренней таблицы значения первой я делаю только еще одну ссылку на первую таблицу? :roll:
Если следовать вашим рассуждениям, обращаясь к таблице gt_labst_copy я буду удалять записи и в основной таблице? :shock:
В общем, не согласный я... :P


Нет ничего проще, чем проверить мои слова. Как это сделать, я указал. Можно ещё почитать первоисточник. Его я тоже указал. Что касается версий, то тут спорить я не могу, поскольку проверял только на 4.7.
Повторюсь, копирование объектов памяти происходит не при присваивании ссылок, а перед попыткой модифицировать объект через одну из них. Поэтому, удаляя записи из объекта через одну из ссылок, вы будете их удалять уже из копии объекта.

Что же касается, объектов, объявленных как field-symbols, то в строгом смысле слова они не являются ссылками (по крайней мере, в терминах ABAP):
Цитата:
Field symbols are placeholders or symbolic names for other fields.
...
Field symbols are similar to dereferenced pointers in C (that is, pointers to which the content operator * is applied). However, the only real equivalent of pointers in ABAP, that is, variables that contain a memory address (reference) and that can be used without the contents operator, are reference variables in ABAP Objects.


В любом случае, спасибо за внимание к поднятой мною теме.


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

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Чтож, уговорили, сдаюсь :)
Будем думать, что записи первой внутренней таблицы копируются во вторую не при присвоении
itab2 = itab1.
а при обращении к itab2. Нетривиально, но, видимо, в 4.7 это так.
Запишем это в опыт "тонких моментов" реализации SAP R/3.

Кстати, в 4.7 не реализовали случайно SELECT из внутренней таблицы? Я видел как-то раз такой код. Правда, у нас, на 4.6 он не работал... :wink:

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 22 2005, 17:06 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
nicky555 написал:
Чтож, уговорили, сдаюсь :)
Будем думать, что записи первой внутренней таблицы копируются во вторую не при присвоении
itab2 = itab1.
а при обращении к itab2. Нетривиально, но, видимо, в 4.7 это так.
Запишем это в опыт "тонких моментов" реализации SAP R/3.

Это уже довольно старая фишка и принято так делать не только в R3. Например Delphi со строками поступает аналогичным образом

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 26 2005, 09:23 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Вторая задачка энтузиазма не вызвала. Видимо, она была слишком простая.
Локальное объявление TABLES приравнивается к глобальному. Однако при локальном объявлении изменения, производимые с рабочей областью таблицы внутри процедуры, будут не видны за её пределами, как если бы эта рабочая область была объявлена с помощью LOCAL. Поэтому в форме WRITE_DATA поле mard-matnr будет пустым. А поскольку по умолчанию на экран пустые строки не выводятся, то не будет выведено ни одной строки.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, май 05 2005, 08:14 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
EGF написал(а):
С вашего позволения приведу ещё одну задачку
...................
Вопрос: сколько строк выведет программа на экран при условии, что в таблице MARD 1000 записей?

На первый взгляд выглядит глупой задачей. Во-первых Select ограничен выборкой одной записи, во-вторых данные помещаются в структуру MARD (не таблицу). Результат - одна запись.
Или здесь сокрыт "глубокий смысл"?
Давненько не пользовался NO STANDARD PAGE HEADING.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, май 05 2005, 08:37 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Parazit написал:
На первый взгляд выглядит глупой задачей. Во-первых Select ограничен выборкой одной записи, во-вторых данные помещаются в структуру MARD (не таблицу). Результат - одна запись.
Или здесь сокрыт "глубокий смысл"?
Давненько не пользовался NO STANDARD PAGE HEADING.


Вы бы потрудились прочитать ответ на задачу.


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

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
EGF написал(а):
Вы бы потрудились прочитать ответ на задачу.

Каюсь, второй лист не заметил... Но все равно, ерунда. Какая то искусственная ситуация.


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

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Parazit написал:
Но все равно, ерунда. Какая то искусственная ситуация.

Ну отчего же? Вполне возможно, это была чья-нибудь ошибка, об которую когда-то кто-то чуть голову не сломал, а потом таки нашел решение.. Кстати, судя по вашим же словам, это потенциально могла быть и ваша ошибка :)

_________________
С уважением, Сергей Королев


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

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Сергей, предлагаю поломать голову над реализацией вызова из одной программы другой так, что доступ через память к переменным первой из второй не дает результата - там просто ничего нет.
Причем, возможен возврат из второй в первую с полным сохранением контекста обработки.
Наткнулся просто недавно на такую "фичу", но пока не разбирался в коде...

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


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

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
В смысле отсутствие доступа - цель? Т.е. чтобы и динамический assign не работал?
А что за "фича"? Как хоть выглядит?

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, май 05 2005, 10:28 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
ну так вот...
есть обработка ОС (AS01-AS03),
есть возможность вызвать оттуда свою программу (отчет, диалог),
есть расписанная всеми с ног до головы возможность получить данные контекста через память (через field-symbols).
Соответственно, пишу свою вызываемую программу, ожидаю, используя Field-symbols, получить данные контекста транзакций ОС.
... И ничего не выходит :wink:
Вопрос: как реализован вызов моей программы?

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, май 05 2005, 11:00 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
речь о submit?
Вызванный через submit отчёт вроде имеет свой стек вызовов..


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, май 05 2005, 11:24 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 08:55
Сообщения: 331
Откуда: Украина, г.Мариуполь
Пол: Мужской
Я, видимо, мало чего понял насчет вызова одной программы из другой - мало опыта. Поэтому, если это офф, может, лучше начать отдельным топиком. Но мне бы очень хотелось знать, как вызвать одну программу из другой и получить нужные результаты. В частности, нашу бухгалтерию не устраивает работа стандартных отчетов инфосистемы MC.5 и MCBR (запасы по складам/партиям) - им нужен комбинированный отчет. Я бы хотел сделать вызов процедуры в каждой из этих программ, заполнив соотв. itab, затем подкорректировать значения, полученные из MC.5, и слить в одну itab.
Я написал отчет для них по таблицам MARD(H), MCHB(H), MBEW(H), но хотелось бы использовать готовую ф-нальность...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, май 05 2005, 11:46 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
nicky555 написал:
ну так вот...

Э-ээ.. ммм.. типа фиг его знает :)
Вообще-то честно посмотрел код, увидел несколько customer-functions, но в них на первый взгляд ничего особенного нету. в принципе, пришло в голову про CALL FUNCTION ... IN UPDATE TASK или CALL FUNCTION ... STARTING NEW TASK.
через SUBMIT вроде можно достать поле вызывающей задачи.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

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


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

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


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

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