Показать сообщение отдельно
Старый 13.02.2007, 00:21   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ужас какой-то...
1. Может стоит накидать запрос в АОТ мышкой. А range вставлять конструкцией SysQuery::findOrCreateRange(...)
Низзя Да, этот совет уже можно записывать в FAQ и давать ссылку вместо многократного повторения, но в реальном классе, генерирующем отчет, вместо fieldnum(VendTrans, AccountNum) фигурирует this.contragentFieldAccount(), чтобы не писать два идентичных класса для поставщиков/клиентов...
Цитата:
2. Вместо одного суперзапроса в многопользовательской системе лучше делать несколько небольших. См. aEremenko: Ресурс заблокирован, ждите...
Во-первых, у меня уже и так куча подзапросов, поскольку реально для получения необходимых данных используется порядка 9 таблиц, что парсер запросов переварить никак не может. Во-вторых, у меня нет ни одной записи (select forupdate), так что блокировки тут ни при чем. В-третьих, отчет и так генерится по годичному обороту в 6 компаниях вместе с выплевыванием в Excel секунд за 5-7. Другое дело, что сейчас в него попадают лишние проводки
Цитата:
3. Ваш select не эквивалентен Query. В select вы получаете выборку из одного большого union'а. В Query вы прицепили две таблицы к одной ведущей. Порядок обхода будет другим. См. Руководство разработчика. Раздел по ключевому слову "Sequencing of retrieved records".
То, что не эквивалентен, - это понятно. В запросах и так нельзя адекватно отразить многое из обычного SQL; вопрос в том, почему запрос не работает так, как надо