Показать сообщение отдельно
Старый 10.12.2004, 11:52   #18  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Цитата:
Изначально опубликовано bucken
1. Если это приводит к падению аксапты, то не есть ли это ошибка программы, хотя бы потому что падение любого по - считается критической ошибкой?
Абсолютно согласен, это бесспорно. Аксапта очень часто вылетает с сообщением об ошибке, т.к. её создатели в коде (С++) не отработали всех исключительных ситуаций. Радует только то что происходит это как правило только в тех случаях когда действительно возникают исключительные ситуации, в т.ч. и когда программист на X++ пишет не совсем корректный код.

Цитата:
А что присматриваться то?
Создание полной копии буфера без сслылок на буфер источника. Так называемое копирование объектов.
Это для обычных таблиц так и это просто и естественно. А вот временные таблицы более сложные структуры, в них помимо основных данных (data()) хранится еще и ссылка на буфер, где хранятся временные данные. data() не копирует его, и похоже вообще забивает во внутренней структуре аксапты это поле мусорным, либо NULL значением, поэтому попытки делать по этой новой, сгенерированной методом data() структуре селекты вызывают GPF.

Цитата:
Чтобы понять, что я имел в виду, под фильтрацией буфера, проведите маленький эксперимент:...
Я понимаю что вы имеете ввиду - выборки по активным табличным переменным датасоурсов сразу же сказываются самым неожиданным образом на содержимом датасоурса. НО! тут есть более тонкий момент.
Дело в том, что методу setTmpData можно спокойно передавать ссылку на активную табличную переменную датасоурса, т.к. он её не модифицирует и не делает по ней выборки. (Поэтому я и писал в посте выше "...без всяких побочных эффектов.", мой пример совершенно бесследно для датасоурса отображает сумму по всем запиям.) У него вообще принцип действия другой - он напрямую обращается к указателю на временные данные в переданной ему табличной переменной и вытаскивает оттуда все записи. Ввиду сказанного пунктом выше в случае использвоания data() он глючит. Для реальных, а не временных таблиц всё совсем по другому.

Цитата:
Лана.. Alks, я и в правду занервничал - чуть злиться даже начал.
Опять же таки не хочу флудить и все такое. Не будем пылить по пусту, ок?
Солидарен.

P.S.

Кстати, забыл сказать, если вы хотите получить некую выборку, в которую попадают только записи отфильтрованные в датасоурсе, то стандартный способ получить эту выборку: ds.getFirst() и ds.getNext(). Теперь оглядываясь назад мне кажется что это именно то что вам нужно было изначально, т.к. в setTmpData попадут все записи из временной таблицы, даже если они не отвечают фильтрав в datasource.