Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Что не так в моем коде? ТП + 3.0 (число прочтений - 6856 )
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Что не так в моем коде? ТП + 3.0
29. Марта 2008 :: 06:32
Печать  
Вот и я присоединился.
Торомза жутчайшие!
особенно у ТП.
ПРошу ногами не пинать.
на сборке 2.5.0.6 от 130308 спрвочник Летает.
а вот с 3.0 тормоза прямо таки жуткие.
Вот класс:
Код
Выбрать все
Перем ТипЦены Экспорт;
Перем Фирма Экспорт;
Перем Элемент Экспорт;
Перем Склад Экспорт;
Перем Поставщик;
Перем СпКолонки;

Функция Сам(Конт) Возврат Конт; КонецФункции //:Контекст

Функция УстановитьСклад(Объект) Экспорт
	Склад=Объект;
	УсловиеСклада="";
	Если ПустоеЗначение(Склад)=0 Тогда
		УсловиеСклада=" and Склад=?ВыбСклад(14,9)"
	КонецЕсли;
	РадугаМД = СоздатьОбъект("MetaDataWork");
	реквАналог = "SP" + РадугаМД.ИДРеквизитаСправочника("Аналоги", "Аналог");
	Текст="
	|select
	|  ТМЦ.code as Код,
	|  $Аналоги.Аналог as [Аналог $Справочник.ТМЦ],
	|  $ПоследнееЗначение.Цены.Единица(Цены.id,:ВыбДата) as [Ед $Справочник.Единицы],
	|  $ПоследнееЗначение.Цены.Валюта(Цены.id,:ВыбДата) as [Вал $Справочник.Валюты],
	|  $ПоследнееЗначение.Цены.Цена(Цены.id,:ВыбДата) as Цена
	|,
	|  (select sum(Резервы.РезервТовараОстаток)
	|   from $РегистрОстатки.РезервыТоваров(,,
	|          Товар="+реквАналог+",
	|          Товар, РезервТовара
	|        ) Резервы
	|  ) as Резерв,
	|  (select sum(Остатки.ОстатокТовараОстаток)
	|   from $РегистрОстатки.ОстаткиТоваров(,,
	|          Товар="+реквАналог+" and Фирма=?ВыбФирма(14,9) "+УсловиеСклада+",
	|          Товар, ОстатокТовара
	|        ) Остатки
	|  ) as Остаток,
	|  Аналоги.code as КодАналога,
	|  Аналоги.row_id as row_id
	|from $Справочник.Аналоги as Аналоги (nolock)
	|inner join $Справочник.ТМЦ as ТМЦ on ТМЦ.id = $Аналоги.Аналог
	|left join $Справочник.Цены as Цены on Цены.parentext = $Аналоги.Аналог and $Цены.КатегорияЦены = ?ВыбЦена(14,9)
	//|inner join $Справочник.Цены as Цены on Цены.parentext = $Аналоги.Аналог and $Цены.КатегорияЦены = ?ВыбЦена(14,9)
	|where Аналоги.parentext=?ТекТовар(14,9)
	|";
	Поставщик.УстановитьТекстовыйПараметр("ВыбДата",РабочаяДата());
	Поставщик.УстТекстЗапроса(Текст);
	Если ПустоеЗначение(Склад)=0 Тогда
		Поставщик.Параметры.Установить("ВыбСклад",Склад);
	КонецЕсли;
	Поставщик.УстКлючПорядка("row_id");
	Поставщик.Параметры.Установить("ТекТовар",Элемент);
	Поставщик.Параметры.Установить("ВыбФирма",Фирма);
	Поставщик.Параметры.Установить("ВыбЦена",ТипЦены);
	Для н=1 По СпКолонки.РазмерСписка() Цикл
		Представление="";
		Имя=СпКолонки.ПолучитьЗначение(н,Представление);
		Поле=Поставщик.Поля.Добавить(Имя);
		Поле.Автоудаление=0;
	КонецЦикла;
	Поставщик.Обновить();
КонецФункции	// ПриИзмененииСклада

Функция Инит(КонтекстФормы, ИдентификаторРеквизита) Экспорт
	оФорма = СоздатьОбъект("Форма");
	оФорма.УстановитьФорму(КонтекстФормы.Форма);
	ТП=оФорма.СоздатьЭлементУправления(Сам(Контекст), ИдентификаторРеквизита);
	Источник = СоздатьОбъект("ODBCDataProvider.MSSQL");
	Источник.БазаДанных = СоздатьОбъект("ODBCDatabase");
	ТП.ПоставщикДанных=Источник;

	Поставщик=ТП.ПоставщикДанных;

	ТП.СтильЗаголовков = 0;
	ТП.ТаймАутОбновления=0;
	УстановитьСклад(Склад);
	Колонки = ТП.Колонки;
	Колонки.Очистить();
	Для н=1 По СпКолонки.РазмерСписка() Цикл
		Представление="";
		Имя=СпКолонки.ПолучитьЗначение(н,Представление);
		Колонка=Колонки.Добавить(Имя);
		Колонка.Заголовок=Представление;
		Колонка.Данные=Имя;
	КонецЦикла;
КонецФункции

Функция УстановитьЭлемент(Объект) Экспорт
	Элемент=Объект;
	Поставщик.Параметры.Установить("ТекТовар",Элемент);
	Поставщик.Обновить();
КонецФункции	// УстановитьЭлемент

Функция УстановитьФирму(Объект) Экспорт
	Фирма=Объект;
	Поставщик.Параметры.Установить("ВыбФирма",Фирма);
	Поставщик.Обновить();
КонецФункции	// УстановитьФирму

Функция УстановитьТипЦены(Объект) Экспорт
	ТипЦены=Объект;
	Поставщик.Параметры.Установить("ВыбЦена",ТипЦены);
	Поставщик.Обновить();
КонецФункции	// УстановитьТипЦены


СпКолонки=СоздатьОбъект("СписокЗначений");
СпКолонки.ДобавитьЗначение("Код","Код");
СпКолонки.ДобавитьЗначение("Аналог","Аналог");
СпКолонки.ДобавитьЗначение("Цена","Цена");
СпКолонки.ДобавитьЗначение("Вал","Вал");
СпКолонки.ДобавитьЗначение("Ед","Ед");
СпКолонки.ДобавитьЗначение("Остаток","ост.");
СпКолонки.ДобавитьЗначение("Резерв","рез.");


 


Причем на форме у меня помимое этой ТП есть еще 3 шт.
1 оналогична этой + 1 тянет остатки а еще одна документы
И по скрости я вам скажу 3.0 просто вешалка!
« Последняя редакция: 30. Марта 2008 :: 07:24 - fez »  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Тестирование 1cpp-icl (icpp)
Ответ #1 - 29. Марта 2008 :: 06:47
Печать  
Да и еще забыл добавить что на форме есть вот такая процедура и функция:
Код
Выбрать все
Функция ВернутьЦенуВГривне(Цена,Валюта)
	Если ПустоеЗначение(Валюта)=1 Тогда
		Возврат 0;
	КонецЕсли;
	поз=0;
	Если ТЗ_Курсы.НайтиЗначение(Валюта,поз,"Валюта")=0 Тогда
		Возврат 0;
	КонецЕсли;
	ТЗ_Курсы.ПолучитьСтрокуПоНомеру(поз);
	Курс=ТЗ_Курсы.Курс;
	Если Курс=0 Тогда
		Возврат 0;
	КонецЕсли;
	Возврат Цена*Курс;
КонецФункции	// ВернутьЦенуВГривне

эта вызывается ПриВыводеСтроки ТП
Процедура ПриВыводеСтрокиТП(ТП,ОформлениеСтроки,ДанныеСтроки)
	Попытка
		Ост=ДанныеСтроки.Остаток;
		Рез=ДанныеСтроки.Резерв;
		лВалюта=ДанныеСтроки.Вал;
		лЦена=ДанныеСтроки.Цена;
		Если Ост=0 Тогда
			ОформлениеСтроки.ЦветФона=глПолучитьЦвет(200,200,200);
		Иначе
			Если (Ост-Рез)>0 Тогда
				ОформлениеСтроки.ЦветФона=глПолучитьЦвет(100,255,100);
			КонецЕсли;
		КонецЕсли;
		ЯчейкаВал=ОформлениеСтроки.Ячейки.Вал;
		Если лВалюта<>Гривня Тогда
			ЯчейкаЦена=ОформлениеСтроки.Ячейки.Цена;
			Если ПустоеЗначение(лВалюта)=0 Тогда
				ЯчейкаВал.УстановитьТекст(Строка(Гривня.Кратко));
				ЯчейкаЦена.УстановитьТекст(Строка(ВернутьЦенуВГривне(лЦена,лВалюта)));
			Иначе
				ЯчейкаВал.УстановитьТекст("нет Валюты");
				ОформлениеСтроки.ЦветФона=глПолучитьЦвет(255,0,0);
			КонецЕсли;
		Иначе
			ЯчейкаВал.УстановитьТекст(Строка(Гривня.Кратко));
		КонецЕсли;
	Исключение
	КонецПопытки;
КонецПроцедуры	// ПриВыводеСтрокиТП

 



может проблема тут
но серавно тормозит.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Тестирование 1cpp-icl (icpp)
Ответ #2 - 29. Марта 2008 :: 07:40
Печать  
varelchik

С таким запросом оно не то, что летать не может, оно и ползает с трудом.
Такое использование ТП даже обсуждать лениво.
Если хочешь, открывай отдельную тему с названием "почему на таком запросе ТП тормозит".

all

Теперь по отличиям 1cpp/2.5.0.6 nightbuild и icpp/3.0.
Если вы видите отличия в скорости между этими вариантами, скорее всего вы что-то делаете не так.
Прежде, чем писать сюда, проверяйте нормально, о каких именно сборках идет речь.

Если ошибки нет, и речь действительно о двух последних версиях, - готов рассматривать, но при наличии воспроизводимых тестов.
Не сочтите за отсутствие радости от наличия комментариев, но разгребать недостоверную информацию просто лениво.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Тестирование 1cpp-icl (icpp)
Ответ #3 - 29. Марта 2008 :: 08:26
Печать  
to varelchik
Поддержу kms.
Заявления типа "а вот с 3.0 тормоза прямо таки жуткие." можно применять после четкой локализации проблемы, а не вываливая тонны кода, который проверить нельзя.
А то получается - гости ушли, а осадок остался.

Сделай простейший, воспроизводимый независимо от конфы, тест.
Очень часто на этом этапе сам видишь свою ошибку.

ЗЫ. Когда человек пробует что-то новое, ему свойствено валить все свои неприятности именно на это новое.
И необдуманные эмоциональные высказывания приносят вред не только ему, но и другим.
Кого-то заставит судорожно листать свой код, а кого-то вообще отпугнет.

ЗЗЫ. Я никаких изменений в скорости у себя не вижу.
  
Наверх
ICQ  
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Тестирование 1cpp-icl (icpp)
Ответ #4 - 29. Марта 2008 :: 10:10
Печать  
Прошу прощения.
Но сам факт.
Работает ведь.
на старой.

Если вы считаете что запрос не правильный, предложите свой вариант.
я уже жто в отдельной ветке поднимал.
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Тестирование 1cpp-icl (icpp)
Ответ #5 - 29. Марта 2008 :: 10:36
Печать  
Не хочу занудничать, но повторюсь.
Цитата:
Сделай простейший, воспроизводимый независимо от конфы, тест.

Ну откуда мы знаем структуру твоих данных, что у тебя еще находится на форме и т.д.

Сделай, погоняй у себя и может и вопрос отпадет.
Поймаешь баг четко, благодарность тебе от потомков.
  
Наверх
ICQ  
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Тестирование 1cpp-icl (icpp)
Ответ #6 - 29. Марта 2008 :: 10:57
Печать  
vip писал(а) 29. Марта 2008 :: 10:36:
Не хочу занудничать, но повторюсь.
Цитата:
Сделай простейший, воспроизводимый независимо от конфы, тест.

Ну откуда мы знаем структуру твоих данных, что у тебя еще находится на форме и т.д.

Сделай, погоняй у себя и может и вопрос отпадет.
Поймаешь баг четко, благодарность тебе от потомков.


Ще раз повторяю!
баг на лицо.
попробую сделать базу без документов.
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Тестирование 1cpp-icl (icpp)
Ответ #7 - 29. Марта 2008 :: 11:12
Печать  
Цитата:
Ще раз повторяю!
баг на лицо.

Еще раз повторю.
Цитата:
Сделай простейший, воспроизводимый независимо от конфы, тест.

Твой код просто невозможно проверить.
ЗЫ. Я сознательно не хочу углуб##ться в твой код. Замечания потом.
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Тестирование 1cpp-icl (icpp)
Ответ #8 - 29. Марта 2008 :: 13:21
Печать  
varelchik
у тебя КП не попадает в индекс  Злой
нужно Поставщик.УстКлючПорядка("КодАналога,row_id");
  

1&&2&&3
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестирование 1cpp-icl (icpp)
Ответ #9 - 06. Апреля 2008 :: 10:28
Печать  
trad писал(а) 29. Марта 2008 :: 13:21:
у тебя КП не попадает в индекс  Злой
нужно Поставщик.УстКлючПорядка("КодАналога,row_id");


Хмм... но ведь row_id это праймери кей, и написав УстКлючПорядка("row_id") в индекс как раз должен попадать?
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Что не так в моем коде? ТП + 3.0
Ответ #10 - 07. Апреля 2008 :: 12:10
Печать  
А я про что говорю?
row_id это самый главный ключ.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Что не так в моем коде? ТП + 3.0
Ответ #11 - 07. Апреля 2008 :: 12:28
Печать  
varelchik писал(а) 07. Апреля 2008 :: 12:10:
А я про что говорю?
row_id это самый главный ключ.

Если бы ты делал отбор в where по КодАналога, то целесообразнее было бы написать КодАнанлога,row_id. А тут х.з., выслушаем мнение биг босов Улыбка
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Что не так в моем коде? ТП + 3.0
Ответ #12 - 08. Апреля 2008 :: 10:55
Печать  
Улыбка
учтите, друзья, что в тексте запроса еще есть Аналоги.parentext=?ТекТовар(14,9)
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Что не так в моем коде? ТП + 3.0
Ответ #13 - 08. Апреля 2008 :: 10:58
Печать  
varelchik писал(а) 07. Апреля 2008 :: 12:10:
А я про что говорю?
row_id это самый главный ключ.

и что?
какое отношение имеет твой "самый главный ключ" к твоему тексту запроса?
вопросы риторические. ответов не требуют. просто для наводки.
  

1&&2&&3
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Что не так в моем коде? ТП + 3.0
Ответ #14 - 08. Апреля 2008 :: 13:08
Печать  
trad писал(а) 08. Апреля 2008 :: 10:55:
Улыбка
учтите, друзья, что в тексте запроса еще есть Аналоги.parentext=?ТекТовар(14,9)

тады ой, не узрел Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать