Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Не правильный порядок выгрузки табличной части (число прочтений - 5137 )
Lili
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 31. Августа 2006
Не правильный порядок выгрузки табличной части
31. Августа 2006 :: 11:39
Печать  
Используя прямой запрос, я получаю табличную часть документа Реализация. При этом после выгрузки получается, что порядок следования строк табличной части отличается от того, что хранится на самом деле в документе. К примеру:
В документе строки идут под таким порядком:
Номенклатура 1,
Номенклатура 2,
Номенклатура 3

После выполнения прямого запроса я получаю такой порядок:
Номенклатура 2,
Номенклатура 1,
Номенклатура 3

Из-за чего возникает такая ситуация, и как мне можно получить правильный порядок выгрузки строк, так как они хранятся в документе?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не правильный порядок выгрузки табличной части
Ответ #1 - 31. Августа 2006 :: 11:42
Печать  
Добавь к запросу

ORDER BY Док.LINENO_
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не правильный порядок выгрузки табличной части
Ответ #2 - 31. Августа 2006 :: 11:45
Печать  
order by .... ТЧРаелиз.LINENO_
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не правильный порядок выгрузки табличной части
Ответ #3 - 31. Августа 2006 :: 12:06
Печать  
Лучше смотреть на индексы и в них попадать:
ORDER BY iddoc, lineno_
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не правильный порядок выгрузки табличной части
Ответ #4 - 31. Августа 2006 :: 12:32
Печать  
spock писал(а) 31. Августа 2006 :: 12:06:
Лучше смотреть на индексы и в них попадать:
ORDER BY iddoc, lineno_

Запрос уже попадает в индекс, т.к. отбирается табличная часть документа (одного). При этом (index seek ordered forward) записи должны быть упорядочены по номеру строки. Оптимизатор не может не захотеть использовать этот индекс, т.к. он один и кластерный. Вероятно, на порядок строк здесь влияет порядок соединения таблиц.

Короче, IMHO, достаточно сортировки по lineno_
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Lili
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 31. Августа 2006
Re: Не правильный порядок выгрузки табличной части
Ответ #5 - 31. Августа 2006 :: 14:04
Печать  
Всем большое спасибо за помощь.

Запрос выглядит следующим образом:
     КодСКЛ = "
           |select
           |   2                              as [Выгрузить],
           |
           |      (case
           |            jr.Closed&1 when 1 then 'Проведен'
           |            else
           |                  case
           |                        jr.ismark when 0 then 'Не проведен'
           |                  else 'Помечен на удаление'
           |                  end
           |      end) as СтатусДок,
           |      cast(left(jr.DATE_TIME_IDDOC,8) as datetime)        as [ДатаДок],
           |   jr.DocNo                                          as [НомерДок],
           |
           |         sprKontr.descr            as [Контрагент],
           |
           |      sprNom.descrr                  as [Номенклатура],
           |         $ДокСтроки.Количество            as [Количество],
           |
           |from
           |
           |      $Документ.Реализация as ДокШапка (nolock)
           |
           |      inner join _1sjourn as jr (nolock) on
           |            (jr.iddoc = ДокШапка.iddoc)
           |
           |      inner join $Справочник.Контрагенты as sprKontr (nolock) on
           |            (sprKontr.id = $ДокШапка.Контрагент)
           |
           |      inner join $ДокументСтроки.Реализация as ДокСтроки (nolock)                   
                               |on (ДокСтроки.iddoc = ДокШапка.iddoc)
           |
           |      inner join $Справочник.Номенклатура as sprNom (nolock) on
           |            (sprNom.id = $ДокСтроки.Номенклатура)
           |      
           |where
           |      (jr.DATE_TIME_IDDOC >= :НачДатаПериода) and (jr.DATE_TIME_IDDOC <= :КонДатаПериода~)
           |
           |ORDER BY ДокШапка.lineno_;
           |";

Когда указываю строчку - "ОRDER BY ДокШапка.lineno_;" , то система ругается:
State 42000, native 107, message [Microsoft][ODBC SQL Server Driver][SQL Server]The column prefix 'ДокШапки' does not match with a table name or alias name used in the query.

Если же указываю "ОRDER BY ДокСтроки.lineno_;"  - то отчет срабатывает, но тогда в ТЗ выгружаются документы в беспорядке.
После выполения отчета мы получаем в ТЗ все документы за указанный период. До того как в коде стояла сортировка ОRDER BY ДокСтроки.lineno_; система возвращала следующее:

НомерДок 1, номенклатура 1
НомерДок 1, номенклатура 2

НомерДок 2, номенклатура 1
и т.д.

После указания строки - ОRDER BY ДокСтроки.lineno_; получаем следующее:

НомерДок1, номенклатура 1
НомерДок 2, номенклатура 1
НомерДок 1, номенклатура 2

После выполнения
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не правильный порядок выгрузки табличной части
Ответ #6 - 31. Августа 2006 :: 14:04
Печать  
berezdetsky писал(а) 31. Августа 2006 :: 12:32:
Короче, IMHO, достаточно сортировки по lineno_

Может и так, но лучше ему подсказать, имхо.
  
Наверх
ICQ  
IP записан
 
Lili
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 31. Августа 2006
Re: Не правильный порядок выгрузки табличной части
Ответ #7 - 31. Августа 2006 :: 14:08
Печать  
Продолжение..

Можно ли сделать  чтобы система и табличную чать документа отфильтровала, и в ТЗ все выгружалось в правильном порядке, документ1 со всеми строками, а потом уже документ 2 со всеми строками , и т.д?
  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не правильный порядок выгрузки табличной части
Ответ #8 - 31. Августа 2006 :: 14:10
Печать  
у таблицы ДокШапка нет реквизтита lineno_

странная ты девушка, ведь те ж сказали что он есть у табличной части, хотя может по примеру ТЧРаелиз.LINENO_ и ен понятно было, но можно же было посмотреть структуру таблицы, по которой делаешь запрос. а потом уже спрашивать тут, почему запрос ругается на отсутсвие этого поля, хотя тебе SQL ясно дал понять что отбор и сортировку он не умеет делать по несуществующим полям...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не правильный порядок выгрузки табличной части
Ответ #9 - 31. Августа 2006 :: 14:10
Печать  
Lili писал(а) 31. Августа 2006 :: 14:08:
Продолжение..

Можно ли сделать  чтобы система и табличную чать документа отфильтровала, и в ТЗ все выгружалось в правильном порядке, документ1 со всеми строками, а потом уже документ 2 со всеми строками , и т.д?

да, принцип order by, такой как у метода Сортировать() у таблицы значений в 1С, или наоборот  Подмигивание
сортируй сначала по документу, а потом по строке документа, как советовал spock
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не правильный порядок выгрузки табличной части
Ответ #10 - 31. Августа 2006 :: 14:19
Печать  
Если важна хронология, то

order by jr.DATE_TIME_IDDOC, ДокСтроки.lineno_

если нет - воспользуйся советом spock
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Lili
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 8
Зарегистрирован: 31. Августа 2006
Re: Не правильный порядок выгрузки табличной части
Ответ #11 - 31. Августа 2006 :: 14:30
Печать  
Всем большое спасибо за содействие в моей работе.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать