Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) ТабличноеПоле и зависалово (число прочтений - 2769 )
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
ТабличноеПоле и зависалово
12. Мая 2008 :: 13:09
Печать  
ТабличноеПоле.ПоставщикДанных = "";      
Источник.УстановитьТекстовыйПараметр("ВыбФирма", ВыбФирма);
Источник.УстановитьТекстовыйПараметр("ВыбСклад", ВыбСклад);
Источник.УстановитьТекстовыйПараметр("ТекРодитель", ТекРодитель);
Источник.УстТекстЗапроса(ТекстЗапроса);
Источник.УстИДПоле("ИД");      
ИзменитьСорт();
ТабличноеПоле.ПоставщикДанных = Источник;
ТабличноеПоле.ОбновитьСтроки();
ТабличноеПоле.ПоставщикДанных.Поля.Код.ТипБыстрогоПоиска = 1;

в разделенном режиме на ТабличноеПоле.ОбновитьСтроки(); зависает (почти), в отладчике 99,9% занятого времени. Что за хрень такая, может я не так что-то сделал
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле и зависалово
Ответ #1 - 12. Мая 2008 :: 13:13
Печать  
Текст запроса источника где?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: ТабличноеПоле и зависалово
Ответ #2 - 12. Мая 2008 :: 13:14
Печать  
artbear писал(а) 12. Мая 2008 :: 13:13:
Текст запроса источника где?

SELECT Номенклатура.ID as [Товар $Справочник.Номенклатура]
     , Номенклатура.IsMark as IsMark
     , Номенклатура.IsFolder as IsFolder
     , Номенклатура.PARENTID as [Родитель $Справочник.Номенклатура]
     , '0' as Уровень
     , Номенклатура.CODE as Код
     , Номенклатура.DESCR as Наименование
     , $Номенклатура.Артикул as Артикул
     , $Номенклатура.ОригинальныйНомер as [ОЕ $Справочник.OE_Номера]
     , $Номенклатура.БазоваяЕдиницаИзмерения as [ЕдИзм $Перечисление.ЕдиницыИзмерения]            
     , Номенклатура.ID as ИД
     , (ПартииТоваровОстатки.ОстатокТовараОстаток) as Остаток
     , (РезервыТоваровОстатки.РезервТовараОстаток) as Резерв
FROM $Справочник.Номенклатура AS Номенклатура
     LEFT OUTER JOIN $РегистрОстатки.ПартииТоваров(,
           RIGHT OUTER JOIN $Справочник.Номенклатура AS Номенклатура
           ON Номенклатура.ID = Товар,,(Фирма, Товар, Склад),) AS ПартииТоваровОстатки
                 ON Номенклатура.ID = ПартииТоваровОстатки.Товар
     LEFT OUTER JOIN $РегистрОстатки.РезервыТоваров(,
           RIGHT OUTER JOIN $Справочник.Номенклатура AS Номенклатура ON Номенклатура.ID = Товар,,
           (Фирма, Товар, Склад),) AS РезервыТоваровОстатки
     ON Номенклатура.ID = РезервыТоваровОстатки.Товар
     AND ПартииТоваровОстатки.Фирма = РезервыТоваровОстатки.Фирма
     AND ПартииТоваровОстатки.Склад = РезервыТоваровОстатки.Склад
WHERE (Номенклатура.IsFolder = 2)

В справочнике окло 35 000 элементов
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТабличноеПоле и зависалово
Ответ #3 - 12. Мая 2008 :: 13:34
Печать  
nolock в нужных местах не поможет?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: ТабличноеПоле и зависалово
Ответ #4 - 12. Мая 2008 :: 14:38
Печать  
kms писал(а) 12. Мая 2008 :: 13:34:
nolock в нужных местах не поможет?


А если остатки по регистрам убрать, а расчитывать их отдельно при выводе строки, только в видимой части ТП, то по идее быстрее будет работать.

Так ли это?

Запрос получается все остатки считает (по 35 000 эл.), из-за этого тормозит .
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТабличноеПоле и зависалово
Ответ #5 - 12. Мая 2008 :: 15:06
Печать  
Bagirius писал(а) 12. Мая 2008 :: 14:38:
Запрос получается все остатки считает (по 35 000 эл.), из-за этого тормозит .

Нет.



Ты nolock поставил?
  
Наверх
 
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: ТабличноеПоле и зависалово
Ответ #6 - 12. Мая 2008 :: 18:52
Печать  
Arta писал(а) 12. Мая 2008 :: 15:06:
Bagirius писал(а) 12. Мая 2008 :: 14:38:
Запрос получается все остатки считает (по 35 000 эл.), из-за этого тормозит .

Нет.



Ты nolock поставил?


Смущённый Я еще чайник в запросах SQL, пока на стадии изучения  Нерешительный. Но куда поставить nolock не знаю. Буду листать книгу  Ужас
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТабличноеПоле и зависалово
Ответ #7 - 12. Мая 2008 :: 20:30
Печать  
1. Для чего это:
Код
Выбрать все
RIGHT OUTER JOIN $Справочник.Номенклатура 

?
2. Сколько строк должно быть с однаковым товаром если остаток по партиям есть на нескольких фирмах или складах?
3. Куда втыкаются (ли) текстовые параметры?
4. Ключ порядка?
  

1&&2&&3
Наверх
 
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: ТабличноеПоле и зависалово
Ответ #8 - 13. Мая 2008 :: 06:25
Печать  
trad писал(а) 12. Мая 2008 :: 20:30:
1. Для чего это:
Код
Выбрать все
RIGHT OUTER JOIN $Справочник.Номенклатура 

?
2. Сколько строк должно быть с однаковым товаром если остаток по партиям есть на нескольких фирмах или складах?
3. Куда втыкаются (ли) текстовые параметры?
4. Ключ порядка?


1. Я мастером делал, я так понимаю это для соединения по ID справочника с измерением регистра
2. с одинаковым товаром может быть от 1 до ... строк, в зависимости от количества партий.
3. ???
4.
Процедура ИзменитьСорт()
     ЗначениеСорт = Сорт.ПолучитьЗначение(Сорт.ТекущаяСтрока());
     КлючПорядка = "";
     Если ЗначениеСорт = 1 Тогда
           КлючПорядка = "Код";
     ИначеЕсли ЗначениеСорт = 2 Тогда
           КлючПорядка = "Наименование, Артикул";
     ИначеЕсли ЗначениеСорт = 3 Тогда
           КлючПорядка = "Артикул, Наименование";
     ИначеЕсли ЗначениеСорт = 4 Тогда
           КлючПорядка = "ОЕ, Артикул, Наименование";
     ИначеЕсли ЗначениеСорт = 5 Тогда
           КлючПорядка = "ОЕ, Наименование, Артикул";
     КонецЕсли;
     Если Иерархия = 1 Тогда
           КлючПорядка = "IsFolder, Уровень, " + КлючПорядка;
     КонецЕсли;
     Если ПоПартиям = 1 Тогда
           КлючПорядка = КлючПорядка + ", ИД";
     КонецЕсли;
     Источник.УстКлючПорядка(КлючПорядка);
КонецПроцедуры
  
Наверх
ICQ  
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: ТабличноеПоле и зависалово
Ответ #9 - 13. Мая 2008 :: 06:28
Печать  
самый полный запрос по первому уровню

SELECT Номенклатура.ID as [Товар $Справочник.Номенклатура]
     , Номенклатура.IsMark as IsMark
     , Номенклатура.IsFolder as IsFolder
     , Номенклатура.PARENTID as [Родитель $Справочник.Номенклатура]
     , '0' as Уровень
     , Номенклатура.CODE as Код
     , Номенклатура.DESCR as Наименование
     , $Номенклатура.Артикул as Артикул
     , $Номенклатура.ОригинальныйНомер as [ОЕ $Справочник.OE_Номера]
     , $Номенклатура.БазоваяЕдиницаИзмерения as [ЕдИзм $Перечисление.ЕдиницыИзмерения]
     , ПартииТоваровОстатки.Партия as [Партия $Документ]
     , (ПартииТоваровОстатки.Партия +
+ Номенклатура.ID) as ИД
     , (ПартииТоваровОстатки.СебестоимостьОстаток / ПартииТоваровОстатки.ОстатокТовараОстаток) as ЦЗ
     , (ПартииТоваровОстатки.ОстатокТовараОстаток - IsNull(РезервыТоваровОстатки.РезервТовараОстаток, 0)) as Остаток
     , (РезервыТоваровОстатки.РезервТовараОстаток) as Резерв
FROM $Справочник.Номенклатура AS Номенклатура
     LEFT OUTER JOIN $РегистрОстатки.ПартииТоваров(,
           RIGHT OUTER JOIN $Справочник.Номенклатура AS Номенклатура
           ON Номенклатура.ID = Товар,(Склад = :ВыбСклад) AND (Фирма = :ВыбФирма),(Фирма, Товар, Склад, Партия),) AS ПартииТоваровОстатки
                 ON Номенклатура.ID = ПартииТоваровОстатки.Товар
     LEFT OUTER JOIN $РегистрОстатки.РезервыТоваров(,
           RIGHT OUTER JOIN $Справочник.Номенклатура AS Номенклатура ON Номенклатура.ID = Товар,,
           (Фирма, Товар, Склад, Партия),) AS РезервыТоваровОстатки
     ON Номенклатура.ID = РезервыТоваровОстатки.Товар
     AND ПартииТоваровОстатки.Фирма = РезервыТоваровОстатки.Фирма
     AND ПартииТоваровОстатки.Склад = РезервыТоваровОстатки.Склад
     AND ПартииТоваровОстатки.Партия = РезервыТоваровОстатки.Партия
WHERE (($Номенклатура.Фирма = :ВыбФирма) OR ($Номенклатура.Фирма = $ПустойИд)) AND (((ПартииТоваровОстатки.ОстатокТовараОстаток - IsNull(РезервыТоваровОстатки.РезервТовараОстаток, 0)) <> 0) OR (Номенклатура.IsFolder = 1)) AND (Номенклатура.PARENTID = $ПустойИд)
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТабличноеПоле и зависалово
Ответ #10 - 13. Мая 2008 :: 07:46
Печать  
задача качественно нерешаема
имхо, конечно
  

1&&2&&3
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать