Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Не работает ВыполнитьSQL_ИзТЗ (число прочтений - 11919 )
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Не работает ВыполнитьSQL_ИзТЗ
30. Августа 2010 :: 09:35
Печать  
Код
Выбрать все
	рс = СоздатьОбъект("ODBCRecordset");
	лТекущийДокумент = мКонтекст.ТекущийДокумент();

	лТЗ = СоздатьОбъект("ТаблицаЗначений");
	лТЗ.НоваяКолонка("iddoc");
	лТЗ.НоваяКолонка("lineno_");
	лТЗ.НоваяКолонка("ТЧ_ГУИД");
	лТЗ.НоваяКолонка("id");
	лТЗ.НоваяКолонка("address");
	лТЗ.НоваяКолонка("Улица");
	лТЗ.НоваяКолонка("Дом");
	лТЗ.НоваяКолонка("Квартира");
	лТЗ.НоваяКолонка("Физлицо");
	лТЗ.НоваяКолонка("ЕстьРасход");
	лТЗ.НоваяКолонка("Услуга");
	лТЗ.НоваяКолонка("Кубы");
	лТЗ.НоваяКолонка("ТарифУслуги");

        //
        // заполняем таблицу данными
        //
	мТабПотребление.Выбратьстроки();
	Пока мТабПотребление.ПолучитьСтроку() = 1 Цикл
		лТЗ.НоваяСтрока();
		лТЗ.iddoc = лТекущийДокумент;
		лТЗ.lineno_ = лТЗ.НомерСтроки;
		лТЗ.ТЧ_ГУИД = лТекущийДокумент.ГУИД;
		лТЗ.id = "";
		лТЗ.address = мТабПотребление.address;
		лТЗ.Улица = мТабПотребление.Улица;
		лТЗ.Дом = мТабПотребление.Дом;
		лТЗ.Квартира = мТабПотребление.Квартира;
		лТЗ.Физлицо = мТабПотребление.Физлицо;
		лТЗ.ЕстьРасход = мТабПотребление.ЕстьРасход;
		лТЗ.Услуга = мТабПотребление.Услуга;
		лТЗ.Кубы = мТабПотребление.Кубы;
		лТЗ.ТарифУслуги = мТабПотребление.ТарифУслуги;
	КонецЦикла;


	лТЗ.УстановитьПараметрыКолонки("iddoc",	"Строка",	9, , , , , );
	лТЗ.УстановитьПараметрыКолонки("lineno_", "Число",	, , , , , );
 	лТЗ.УстановитьПараметрыКолонки("ТЧ_ГУИД", 	"Строка",	50, , , , ,);
 	лТЗ.УстановитьПараметрыКолонки("id", "Строка", 10, , , , ,);
 	лТЗ.УстановитьПараметрыКолонки("address", "Строка", 100, , , , ,);
 	лТЗ.УстановитьПараметрыКолонки("Улица", "Строка", 99, , , , ,);
 	лТЗ.УстановитьПараметрыКолонки("Дом", 	"Строка", 10, , , , ,);
 	лТЗ.УстановитьПараметрыКолонки("Квартира", 	"Строка", 	10, , , , ,);
 	лТЗ.УстановитьПараметрыКолонки("Физлицо", "Справочник.ФизическиеЛица",	, , , , ,);
 	лТЗ.УстановитьПараметрыКолонки("ЕстьРасход","Число", 1, , , , ,);
 	лТЗ.УстановитьПараметрыКолонки("Услуга", "Справочник.УслугиСоцзащиты",	, , , , ,);
 	лТЗ.УстановитьПараметрыКолонки("Кубы",	"Число",10, 2, , , ,);
 	лТЗ.УстановитьПараметрыКолонки("ТарифУслуги", "Число", 10, 2, , , ,);


	лТекстЗапроса = "insert into dt1870_x2 (
			|
			|iddoc,
			|LINENO_,
			|
			|sp1908,
			|sp1910,
			|sp1911,
			|sp1912,
			|sp1914,
			|sp1915,
			|sp1916,
			|sp1917,
			|sp1918,
			|sp1919,
			|sp1920
			|
			|values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
	рс.Подготовить(лТекстЗапроса);
	рс.ExeSQL_FromTV(лТЗ);
 



выдается ошибка:
Код
Выбрать все
Произошла ошибка при формировании автоматических параметров.                
Необходимо выполнить подготовку запроса или проверить синтаксис!
 State 07009, native 0, message [Microsoft][ODBC SQL Server Driver]Недопустимый индекс дескриптора
рс.ExeSQL_FromTV(лТЗ);
 



Что у меня неправильно?
Помогите пожалуйста
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #1 - 30. Августа 2010 :: 09:37
Печать  
Забыл написать, что таблица dt1870_x2 - это копия таблицы многострочной части документа.

Поля по номером 9 и 11 - это элементы справочников. Типы этих справочников я и указал в параметрах соответствующих колонок таблицы значений.

Может надо что-то еще указать?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #2 - 30. Августа 2010 :: 10:14
Печать  
не показал как задаешь тип параметров.
у документов lineno_  имеет тип smallint
а ты скорее всего передаешь как int
Для поля входящее в  primary key это наверное недопустимо
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #3 - 30. Августа 2010 :: 10:20
Печать  
Z1 писал(а) 30. Августа 2010 :: 10:14:
не показал как задаешь тип параметров.
у документов lineno_  имеет тип smallint
а ты скорее всего передаешь как int
Для поля входящее в  primary key это наверное недопустимо


Я больше ничего не задаю.
Полностью привел весь мой код.

А как надо задавать тип параметров? Можно примерчик?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #4 - 30. Августа 2010 :: 10:26
Печать  
не хватает ДобПараметр
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #5 - 30. Августа 2010 :: 10:29
Печать  
ИХМО лучше на 1с не надеяться а задавать тип самому
смотри  метод recordset :
ДобПараметр / AddParam

  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #6 - 30. Августа 2010 :: 10:40
Печать  
Спасибо, помогло:
Код
Выбрать все
 	рс.ДобПараметр(1,14,9,0);
 	рс.ДобПараметр(1,3,0,0);
 	рс.ДобПараметр(1,14,50,0);
 	рс.ДобПараметр(1,14,10,0);
 	рс.ДобПараметр(1,14,100,0);
 	рс.ДобПараметр(1,14,99,0);
 	рс.ДобПараметр(1,14,10,0);
 	рс.ДобПараметр(1,14,10,0);
 	рс.ДобПараметр(1,14,9,0);
 	рс.ДобПараметр(1,4,1,0);
 	рс.ДобПараметр(1,14,9,0);
 	рс.ДобПараметр(1,4,10,2);
 	рс.ДобПараметр(1,4,10,2);
 



перед вызовом
Код
Выбрать все
	рс.Подготовить(лТекстЗапроса);
	рс.ExeSQL_FromTV(лТЗ);
 



  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #7 - 30. Августа 2010 :: 10:41
Печать  
получается что  строки типа:
Код
Выбрать все
лТЗ.УстановитьПараметрыКолонки("iddoc",	"Строка",	9, , , , , ); 



вообще не нужны
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #8 - 30. Августа 2010 :: 10:49
Печать  
es3000 писал(а) 30. Августа 2010 :: 10:41:
получается что  строки типа:
Код
Выбрать все
лТЗ.УстановитьПараметрыКолонки("iddoc",	"Строка",	9, , , , , ); 



вообще не нужны

этой строкой ты задаешь структуру таблицы значений
а тебе еще нужно определить структуру параметров для sql
те которые ? ? ? ?

Также мое ИХМО если уж используешь параметры sql то лучше использовать поименованные параметры.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #9 - 30. Августа 2010 :: 10:50
Печать  
Еще вопрос.

Метод "ВыполнитьSQL_ИзТЗ" использует порядок колонок для формирования значений параметров.
Из-за этого мне пришлось имеющуюся таблицу значений перекопировать в новую таблицу значений. Только для того чтобы в новой таблице значений порядок колонок соответствовал порядку полей в запросе. Это очень не удобно.

Можно ли изменить в существующей таблице значений порядок колонок? Или же как-то сказать методу "ВыполнитьSQL_ИзТЗ" в каком порядке брать колонки из ТЗ?
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #10 - 30. Августа 2010 :: 10:52
Печать  
Z1 писал(а) 30. Августа 2010 :: 10:49:
этой строкой ты задаешь структуру таблицы значений
а тебе еще нужно определить структуру параметров для sql
те которые ? ? ? ?

Также мое ИХМО если уж используешь параметры sql то лучше использовать поименованные параметры.


1) Но поскольку структура ТЗ для метода "ВыполнитьSQL_ИзТЗ" не важна, то ее можно явно не задавать. Правильно?
2) Что значит "поименованные параметры"? Как ими пользоваться?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #11 - 30. Августа 2010 :: 10:58
Печать  
es3000 писал(а) 30. Августа 2010 :: 10:52:
Z1 писал(а) 30. Августа 2010 :: 10:49:
этой строкой ты задаешь структуру таблицы значений
а тебе еще нужно определить структуру параметров для sql
те которые ? ? ? ?

Также мое ИХМО если уж используешь параметры sql то лучше использовать поименованные параметры.


1) Но поскольку структура ТЗ для метода "ВыполнитьSQL_ИзТЗ" не важна, то ее можно явно не задавать. Правильно?
2) Что значит "поименованные параметры"? Как ими пользоваться?

1) Но поскольку структура ТЗ для метода "ВыполнитьSQL_ИзТЗ" не важна, то ее можно явно не задавать. Правильно?
- неправильно откуда 1с узнает что строка это строка а не что либо иное. или как 1с отличит конкретный справочник от справочника общего вида.

поименованный параметр пишешь
values (@iddoc, @lineno итд


  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #12 - 30. Августа 2010 :: 11:26
Печать  
Цитата:
1) Но поскольку структура ТЗ для метода "ВыполнитьSQL_ИзТЗ" не важна, то ее можно явно не задавать. Правильно?
- неправильно откуда 1с узнает что строка это строка а не что либо иное. или как 1с отличит конкретный справочник от справочника общего вида.


а по типу конкретного значения в ячейке таблицы??

Цитата:
поименованный параметр пишешь
values (@iddoc, @lineno итд


и что это дает?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #13 - 30. Августа 2010 :: 11:34
Печать  
es3000 писал(а) 30. Августа 2010 :: 11:26:
Цитата:
1) Но поскольку структура ТЗ для метода "ВыполнитьSQL_ИзТЗ" не важна, то ее можно явно не задавать. Правильно?
- неправильно откуда 1с узнает что строка это строка а не что либо иное. или как 1с отличит конкретный справочник от справочника общего вида.


а по типу конкретного значения в ячейке таблицы??

Цитата:
поименованный параметр пишешь
values (@iddoc, @lineno итд


и что это дает?

по типу 1с не может отличить int от smallint
ты пойми sql сервер вообще ничего не знает об 1с и ему вообще то все равно где сформирован запрос главное чтобы запрос был правильным с точки зрения t-sql.

и что это дает?
поименованные параметры дают удобство и большую наглядность.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #14 - 30. Августа 2010 :: 11:49
Печать  
Z1 писал(а) 30. Августа 2010 :: 11:34:
es3000 писал(а) 30. Августа 2010 :: 11:26:
Цитата:
1) Но поскольку структура ТЗ для метода "ВыполнитьSQL_ИзТЗ" не важна, то ее можно явно не задавать. Правильно?
- неправильно откуда 1с узнает что строка это строка а не что либо иное. или как 1с отличит конкретный справочник от справочника общего вида.


а по типу конкретного значения в ячейке таблицы??

Цитата:
поименованный параметр пишешь
values (@iddoc, @lineno итд


и что это дает?

по типу 1с не может отличить int от smallint
ты пойми sql сервер вообще ничего не знает об 1с и ему вообще то все равно где сформирован запрос главное чтобы запрос был правильным с точки зрения t-sql.

и что это дает?
поименованные параметры дают удобство и большую наглядность.


Хм.. я просто хочу понять...

1) Значения из ТЗ читает 1С. Как я понимаю, в этот момент SQL еще не причем. 1C-ке нужно преобразовать это значение в правильное SQL-значение параметра. То есть ей нужно само значение и описание соответствующего SQL-параметра, чтобы знать как преобразовывать. Так что, в принципе, явное указание типа  значения в ТЗ мне кажется лишним.
Кстати, у меня в вышеприведенном примере, без указания типов колонок ТЗ все работает.
Допустим в ячейке хранится число "5". Какая 1С разница какой тип этого значения в ячейке smallint или int. Главное - это SQL-тип в который надо преобразовать.
Если все-таки явное указание типа значения в ТЗ бывает необходимо, то приведи пример такой ситауции.

2) Опять же в моем примере я нигде вручную параметры не устанавливаю, то есть если я параметры сделаю поименованными то удобства они мне не добавят.
Наглядность - да, сагласен
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #15 - 30. Августа 2010 :: 12:05
Печать  
а что-то никто не ответил про порядок колонок:

Цитата:
Метод "ВыполнитьSQL_ИзТЗ" использует порядок колонок для формирования значений параметров.
Из-за этого мне пришлось имеющуюся таблицу значений перекопировать в новую таблицу значений. Только для того чтобы в новой таблице значений порядок колонок соответствовал порядку полей в запросе. Это очень не удобно.

Можно ли изменить в существующей таблице значений порядок колонок? Или же как-то сказать методу "ВыполнитьSQL_ИзТЗ" в каком порядке брать колонки из ТЗ?

  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #16 - 30. Августа 2010 :: 12:14
Печать  
так поименованные параметры тебе и  позволят  привязать
конкретную колонку к другому по порядку параметру sql

это тоже самое если пишешь
insert into tabl1 VALUES (1,2,3) то нужно упорядочивать колонки как они определены в таблице

если же указать явно столбцы то порядок не важен
insert into tabl1( kol_3,kol_2,kol_1 ) VALUES (3,2,1)
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #17 - 30. Августа 2010 :: 12:19
Печать  
Z1 писал(а) 30. Августа 2010 :: 12:14:
так поименованные параметры тебе и  позволят  привязать
конкретную колонку к другому по порядку параметру sql

это тоже самое если пишешь
insert into tabl1 VALUES (1,2,3) то нужно упорядочивать колонки как они определены в таблице

если же указать явно столбцы то порядок не важен
insert into tabl1( kol_3,kol_2,kol_1 ) VALUES (3,2,1)


че-то не врубился...

Я же вставляю не вручную, а при помощи "ВыполнитьSQL_ИзТЗ".
Как я понял ты предлагаешь в списке колонок команды INSERT указать колонки в том порядке, в котором они содержатся в ТЗ?
В этом случае мне поименованные параметры никакого преимущества не дают. В этом случае порядок определяется порядком в команде INSERT. И все равно получается что я привязываюсь к порядку колонок в ТЗ.
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #18 - 30. Августа 2010 :: 12:21
Печать  
А кажется врубился: ты все-таки говоришь про порядок КОЛОНОК в SQL-таблице в команде INSERT. А я говорю про порядок колонок в ТЗ для работы команды "ВыполнитьSQL_ИзТЗ"
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #19 - 30. Августа 2010 :: 12:30
Печать  
es3000 писал(а) 30. Августа 2010 :: 12:21:
А кажется врубился: ты все-таки говоришь про порядок КОЛОНОК в SQL-таблице в команде INSERT. А я говорю про порядок колонок в ТЗ для работы команды "ВыполнитьSQL_ИзТЗ"

insert  приведен только как наглядный пример.
с поименоваными параметрами просто аналогичная ситуация.

Смотри если есть хранимая процедура
CREATE PROCEDURE test_xp
@kl1  char(9)
,@kl2  char(9)
,@kl3  char(9)
as
......

То если мы ее вызовем
как
EXEC test_xp <Зн1>,  <Зн2>, <Зн3>
здесь порядок жестко фиксирован.

Можем же эту процедуру вызвать и по другому
EXEC test_xp @kl3 = <Зн3>,  @kl2 = <Зн2>, @kl1 = <Зн1>


  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #20 - 30. Августа 2010 :: 13:03
Печать  
Я понял.
Но для "ВыполнитьSQL_ИзТЗ" поименованные параметры не помогут Печаль
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #21 - 30. Августа 2010 :: 13:13
Печать  
es3000 писал(а) 30. Августа 2010 :: 13:03:
Я понял.
Но для "ВыполнитьSQL_ИзТЗ" поименованные параметры не помогут Печаль

значит не понял
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #22 - 30. Августа 2010 :: 13:41
Печать  
ну тогда приведи пример, как при помощи "ВыполнитьSQL_ИзТЗ" выполнить такой простой запрос:

Код
Выбрать все
insert into aaa (f1, f2, f3) values (?, ?, ?)  



при этом допустим что колонки в ТЗ расположены в таком порядке: k2, k3, k1
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #23 - 30. Августа 2010 :: 17:00
Печать  
Что-то мне кажется, что запись ТЗ в базу при помощи "ВыполнитьSQL_ИзТЗ" стало медленнее работать, чем сохранение ТЗ построчно.

Может такое быть?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #24 - 30. Августа 2010 :: 17:08
Печать  
es3000 писал(а) 30. Августа 2010 :: 17:00:
Что-то мне кажется,...
Может такое быть?

кажется - креститься надо.
научить замеры делать?
  

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



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #25 - 06. Сентября 2010 :: 12:55
Печать  
через день-два сделаю замер - выложу...
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #26 - 07. Сентября 2010 :: 06:30
Печать  
Записываем ...
Время записи таблицы документа построчно: 72.954с
Время записи таблицы документа при помощи ExeSQL_FromTV: 148.771с

Количество строк: 20-30тыс.

Так что замедление ощутимое, хотя ожидалось ускорение Печаль
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #27 - 07. Сентября 2010 :: 06:44
Печать  
а можно посмотреть код первого и второго теста?
  

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



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #28 - 07. Сентября 2010 :: 06:56
Печать  
Еще более интересные результаты, теперь замерил при разных значениях второго параметра "кол-во строк":

Время записи таблицы  документа построчно: 74.25с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 10): 177.283с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 100): -1124.513с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 200): 96.092с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 500): 192.257с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 1000): 122.371с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 2000): 142.18с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 5000): 125.863с


Почему отрицательное число выскочило - х\з
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #29 - 07. Сентября 2010 :: 07:09
Печать  
Мой код:
Код
Выбрать все
Функция ПодготовитьТекстЗапроса(пТекстЗапроса)

	мИмяТаблицыМногострочнойЧастиДокумента = "_dt1859";
	мИмяТаблицыМногострочнойЧасти = "_dt1859_x";
	мИмяИндексаТаблицыМногострочнойЧасти = "PK_dt1859_x";

	лТекстЗапроса = пТекстЗапроса;

	лТекстЗапроса = СтрЗаменить(лТекстЗапроса, "$ДокументСтроки.Таблица.Реквизит", "$ДокументСтроки.ВыгрузкаДанных");
	лТекстЗапроса = СтрЗаменить(лТекстЗапроса, "$ДокументСтроки.Таблица.Таблица", мИмяТаблицыМногострочнойЧасти);
	лТекстЗапроса = СтрЗаменить(лТекстЗапроса, "$ДокументСтроки.Таблица.Индекс", мИмяИндексаТаблицыМногострочнойЧасти);

	лТекстЗапроса = СтрЗаменить(лТекстЗапроса, "$ДокументСтроки.ТаблицаДокумента", мИмяТаблицыМногострочнойЧастиДокумента);

	Возврат лТекстЗапроса;

КонецФункции


Функция ЗаписатьТаблица_УдалитьСтроки(пТекущийДокумент)

	пРС = СоздатьОбъект("ODBCRecordset");

	пРС.УстановитьТекстовыйПараметр("ТЧ_ГУИД", пТекущийДокумент.ГУИД);
	лТекстЗапроса = "DELETE FROM $ДокументСтроки.Таблица.Таблица WHERE $ДокументСтроки.Таблица.Реквизит.ТЧ_ГУИД = :ТЧ_ГУИД";
	лТекстЗапроса = ПодготовитьТекстЗапроса(лТекстЗапроса);
	лРез = пРС.Выполнить(лТекстЗапроса);
	Если лРез <> 1 Тогда
		Предупреждение("Ошибка при записи документа!" + РазделительСтрок + пРС.ПолучитьОписаниеОшибки());
		Возврат 0;
	КонецЕсли;

	Возврат 1;

КонецФункции


Функция ЗаписатьТаблица_ПоЗаписям()

	лВремяНачалоДействия = _GetPerformanceCounter();

	Мета = СоздатьОбъект("MetaDataWork");
	рс = СоздатьОбъект("ODBCRecordset");
	лТекущийДокумент = мКонтекст.ТекущийДокумент();

	//Сообщить("Удаляем строки");
	ЗаписатьТаблица_УдалитьСтроки(рс, лТекущийДокумент);

	лТекстЗапроса = "insert into $ДокументСтроки.Таблица.Таблица (
			|
			|iddoc,
			|LINENO_,
			|
			|$ДокументСтроки.Таблица.Реквизит.ТЧ_ГУИД,
			|$ДокументСтроки.Таблица.Реквизит.id,
			|$ДокументСтроки.Таблица.Реквизит.address,
			|$ДокументСтроки.Таблица.Реквизит.Адрес,
			|$ДокументСтроки.Таблица.Реквизит.Область,
			|$ДокументСтроки.Таблица.Реквизит.Город,
			|$ДокументСтроки.Таблица.Реквизит.Улица,
			|$ДокументСтроки.Таблица.Реквизит.ЕстьУлица,
			|$ДокументСтроки.Таблица.Реквизит.Дом,
			|$ДокументСтроки.Таблица.Реквизит.ЕстьДом,
			|$ДокументСтроки.Таблица.Реквизит.МногоквартирныйДом,
			|$ДокументСтроки.Таблица.Реквизит.ДомНулеваяСтрока,
			|$ДокументСтроки.Таблица.Реквизит.Квартира,
			|$ДокументСтроки.Таблица.Реквизит.КвартираНулеваяСтрока,
			|$ДокументСтроки.Таблица.Реквизит.НеУказанаКвартираВМногоквартирномДоме,
			|$ДокументСтроки.Таблица.Реквизит.ЕстьКвартира,
			|$ДокументСтроки.Таблица.Реквизит.Физлицо,
			|$ДокументСтроки.Таблица.Реквизит.ПризнакФизлица)
			|
			|values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
	лТекстЗапроса = ПодготовитьТекстЗапроса(лТекстЗапроса);

 	рс.ДобПараметр(1,14,9,0);
 	рс.ДобПараметр(1,3,0,0);
 	рс.ДобПараметр(1,14,50,0);
 	рс.ДобПараметр(1,14,10,0);
 	рс.ДобПараметр(1,14,100,0);
 	рс.ДобПараметр(1,14,512,0);
 	рс.ДобПараметр(1,14,99,0);
 	рс.ДобПараметр(1,14,99,0);
 	рс.ДобПараметр(1,14,99,0);
 	рс.ДобПараметр(1,14,1,0);
 	рс.ДобПараметр(1,14,10,0);
 	рс.ДобПараметр(1,4,1,0);
 	рс.ДобПараметр(1,4,1,0);
 	рс.ДобПараметр(1,4,1,0);
 	рс.ДобПараметр(1,14,10,0);
 	рс.ДобПараметр(1,4,1,0);
 	рс.ДобПараметр(1,4,1,0);
 	рс.ДобПараметр(1,4,1,0);
 	рс.ДобПараметр(1,14,9,0);
 	рс.ДобПараметр(1,4,1,0);

	рс.Подготовить(лТекстЗапроса);

	ТЗ.ВыбратьСтроки();
	Пока ТЗ.ПолучитьСтроку() = 1 Цикл

		//Сообщить("НомерСтроки: " + ТЗ.НомерСтроки);
		//Сообщить("Запись строки документа: " + ТЗ.НомерСтроки + "    " + ТЗ.НомерСтроки());
		Состояние("Запись строки документа: " + ТЗ.НомерСтроки);

		рс.УстПараметр(1, лТекущийДокумент);
		рс.УстПараметр(2, ТЗ.НомерСтроки);
		рс.УстПараметр(3, мКонтекст.ГУИД);
		рс.УстПараметр(4, ТЗ.id);
		рс.УстПараметр(5, ТЗ.address);
		рс.УстПараметр(6, ТЗ.Адрес);
		рс.УстПараметр(7, ТЗ.Область);
		рс.УстПараметр(8, ТЗ.Город);
		рс.УстПараметр(9, ТЗ.Улица);
		рс.УстПараметр(10, ТЗ.ЕстьУлица);
		рс.УстПараметр(11, ТЗ.Дом);
		рс.УстПараметр(12, ТЗ.ЕстьДом);
		рс.УстПараметр(13, ТЗ.МногоквартирныйДом);
		рс.УстПараметр(14, ТЗ.ДомНулеваяСтрока);
		рс.УстПараметр(15, ТЗ.Квартира);
		рс.УстПараметр(16, ТЗ.КвартираНулеваяСтрока);
		рс.УстПараметр(17, ТЗ.ЕстьКвартира);
		рс.УстПараметр(18, ТЗ.НеУказанаКвартираВМногоквартирномДоме);
		рс.УстПараметр(19, ТЗ.Физлицо);
		рс.УстПараметр(20, ТЗ.ПризнакФизлица);

		//Сообщить("тип значения ""квартира"":" + ТипЗначенияСтр(ТЗ.Квартира));
		//Сообщить("тип значения ""адрес распознан"":" + ТипЗначенияСтр(ТЗ.АдресРаспознан));

		лРез = 0;
		Попытка
			рс.ВыполнитьСкалярный();
			лРез = 1;
		Исключение
		КонецПопытки;

		Если лРез <> 1 Тогда
			Предупреждение("Ошибка при записи документа!" + РазделительСтрок + рс.ПолучитьОписаниеОшибки());
			Возврат 0;
		КонецЕсли;

	КонецЦикла;

    лВремяКонецДействия =_GetPerformanceCounter();
	лВремяДействия = лВремяКонецДействия - лВремяНачалоДействия;
	лВремяДействияВСек = лВремяДействия / 1000;
	Сообщить("Время записи таблицы  документа построчно: " + лВремяДействияВСек + "с");

	Возврат 1;

КонецФункции

 


  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #30 - 07. Сентября 2010 :: 07:10
Печать  
Продолжение:

Код
Выбрать все
Функция ЗаписатьТаблица_ИзТЗ (пКолвоСтрок)

	лВремяНачалоДействия = _GetPerformanceCounter();

	Мета = СоздатьОбъект("MetaDataWork");
	рс = СоздатьОбъект("ODBCRecordset");
	лТекущийДокумент = мКонтекст.ТекущийДокумент();

	лТЗ = СоздатьОбъект("ТаблицаЗначений");
	лТЗ.НоваяКолонка("iddoc");
	лТЗ.НоваяКолонка("lineno_");
	лТЗ.НоваяКолонка("ТЧ_ГУИД");
	лТЗ.НоваяКолонка("id");
	лТЗ.НоваяКолонка("address");
	лТЗ.НоваяКолонка("Адрес");
	лТЗ.НоваяКолонка("Область");
	лТЗ.НоваяКолонка("Город");
	лТЗ.НоваяКолонка("Улица");
	лТЗ.НоваяКолонка("ЕстьУлица");
	лТЗ.НоваяКолонка("Дом");
	лТЗ.НоваяКолонка("ЕстьДом");
	лТЗ.НоваяКолонка("МногоквартирныйДом");
	лТЗ.НоваяКолонка("ДомНулеваяСтрока");
	лТЗ.НоваяКолонка("Квартира");
	лТЗ.НоваяКолонка("КвартираНулеваяСтрока");
	лТЗ.НоваяКолонка("НеУказанаКвартираВМногоквартирномДоме");
	лТЗ.НоваяКолонка("ЕстьКвартира");
	лТЗ.НоваяКолонка("Физлицо");
	лТЗ.НоваяКолонка("ПризнакФизлица");

	мТабТаблица.Выбратьстроки();
	Пока мТабТаблица.ПолучитьСтроку() = 1 Цикл
		лТЗ.НоваяСтрока();
		лТЗ.iddoc 		= лТекущийДокумент;
		лТЗ.lineno_		= лТЗ.НомерСтроки;
		лТЗ.ТЧ_ГУИД 	= лТекущийДокумент.ГУИД;
		лТЗ.id 			= мТабТаблица.id;
		лТЗ.address 	= мТабТаблица.address;
		лТЗ.Адрес 		= мТабТаблица.Адрес;
		лТЗ.Область		= мТабТаблица.Область;
		лТЗ.Город 		= мТабТаблица.Город;
		лТЗ.Улица 		= мТабТаблица.Улица;
		лТЗ.ЕстьУлица 	= мТабТаблица.ЕстьУлица;
		лТЗ.Дом 		= мТабТаблица.Дом;
		лТЗ.ЕстьДом 			= мТабТаблица.ЕстьДом;
		лТЗ.МногоквартирныйДом 	= мТабТаблица.МногоквартирныйДом;
		лТЗ.ДомНулеваяСтрока 	= мТабТаблица.ДомНулеваяСтрока;
		лТЗ.Квартира 								= мТабТаблица.Квартира;
		лТЗ.КвартираНулеваяСтрока 					= мТабТаблица.КвартираНулеваяСтрока;
		лТЗ.НеУказанаКвартираВМногоквартирномДоме 	= мТабТаблица.НеУказанаКвартираВМногоквартирномДоме;
		лТЗ.ЕстьКвартира 							= мТабТаблица.ЕстьКвартира;
		лТЗ.Физлицо 		= мТабТаблица.Физлицо;
		лТЗ.ПризнакФизлица 	= мТабТаблица.ПризнакФизлица;
	КонецЦикла;

    лВремяКонецДействия =_GetPerformanceCounter();
	лВремяДействия = лВремяКонецДействия - лВремяНачалоДействия;
	лВремяДействияВСек = лВремяДействия / 1000;
	//Сообщить("Время подготовки таблицы: " + лВремяДействияВСек + "с");

	//Сообщить("Удаляем строки");
	ЗаписатьТаблица_УдалитьСтроки(рс, лТекущийДокумент);

	//-------------------------------------------
	// записываем
	//

	лВремяНачалоДействия = _GetPerformanceCounter();

	лТекстЗапроса = "insert into $ДокументСтроки.Таблица.Таблица (
			|
			|iddoc,
			|LINENO_,
			|
			|$ДокументСтроки.Таблица.Реквизит.ТЧ_ГУИД,
			|$ДокументСтроки.Таблица.Реквизит.id,
			|$ДокументСтроки.Таблица.Реквизит.address,
			|$ДокументСтроки.Таблица.Реквизит.Адрес,
			|$ДокументСтроки.Таблица.Реквизит.Область,
			|$ДокументСтроки.Таблица.Реквизит.Город,
			|$ДокументСтроки.Таблица.Реквизит.Улица,
			|$ДокументСтроки.Таблица.Реквизит.ЕстьУлица,
			|$ДокументСтроки.Таблица.Реквизит.Дом,
			|$ДокументСтроки.Таблица.Реквизит.ЕстьДом,
			|$ДокументСтроки.Таблица.Реквизит.МногоквартирныйДом,
			|$ДокументСтроки.Таблица.Реквизит.ДомНулеваяСтрока,
			|$ДокументСтроки.Таблица.Реквизит.Квартира,
			|$ДокументСтроки.Таблица.Реквизит.КвартираНулеваяСтрока,
			|$ДокументСтроки.Таблица.Реквизит.НеУказанаКвартираВМногоквартирномДоме,
			|$ДокументСтроки.Таблица.Реквизит.ЕстьКвартира,
			|$ДокументСтроки.Таблица.Реквизит.Физлицо,
			|$ДокументСтроки.Таблица.Реквизит.ПризнакФизлица)
			|
			|values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
	лТекстЗапроса = ПодготовитьТекстЗапроса(лТекстЗапроса);

 	рс.ДобПараметр(1,14,9,0);
 	рс.ДобПараметр(1,3,0,0);
 	рс.ДобПараметр(1,14,50,0);
 	рс.ДобПараметр(1,14,10,0);
 	рс.ДобПараметр(1,14,100,0);
 	рс.ДобПараметр(1,14,512,0);
 	рс.ДобПараметр(1,14,99,0);
 	рс.ДобПараметр(1,14,99,0);
 	рс.ДобПараметр(1,14,99,0);
 	рс.ДобПараметр(1,14,1,0);
 	рс.ДобПараметр(1,14,10,0);
 	рс.ДобПараметр(1,4,1,0);
 	рс.ДобПараметр(1,4,1,0);
 	рс.ДобПараметр(1,4,1,0);
 	рс.ДобПараметр(1,14,10,0);
 	рс.ДобПараметр(1,4,1,0);
 	рс.ДобПараметр(1,4,1,0);
 	рс.ДобПараметр(1,4,1,0);
 	рс.ДобПараметр(1,14,9,0);
 	рс.ДобПараметр(1,4,1,0);

 	лРез = 0;
 	Попытка
 		рс.Подготовить(лТекстЗапроса);
 		рс.ExeSQL_FromTV(лТЗ, пКолвоСтрок);
 		лРез = 1;
 	Исключение
 	КонецПопытки;

 	Если лРез <> 1 Тогда
 		Предупреждение("Ошибка при записи документа!" + РазделительСтрок + рс.ПолучитьОписаниеОшибки());
 		Возврат 0;
 	КонецЕсли;

    лВремяКонецДействия =_GetPerformanceCounter();
	лВремяДействия = лВремяКонецДействия - лВремяНачалоДействия;
	лВремяДействияВСек = лВремяДействия / 1000;
	Сообщить(Шаблон("Время записи таблицы соответсвия документа при помощи ExeSQL_FromTV (кол-во строк = [пКолвоСтрок]): ") + лВремяДействияВСек + "с");

	Возврат 1;

КонецФункции


Функция ЗаписатьТаблица()

	Сообщить("Записываем Таблица...");

	лРез = ЗаписатьТаблица_ПоЗаписям();

	лРез = ЗаписатьТаблица_ИзТЗ(0);
	лРез = ЗаписатьТаблица_ИзТЗ(10);
	лРез = ЗаписатьТаблица_ИзТЗ(100);
	лРез = ЗаписатьТаблица_ИзТЗ(200);
	лРез = ЗаписатьТаблица_ИзТЗ(500);
	лРез = ЗаписатьТаблица_ИзТЗ(1000);
	лРез = ЗаписатьТаблица_ИзТЗ(2000);
	лРез = ЗаписатьТаблица_ИзТЗ(5000);

	Возврат лРез;

КонецФункции
 


  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #31 - 07. Сентября 2010 :: 07:13
Печать  
Процедуру "ПодготовитьТекстЗапроса" я сделал для того, чтобы можно было в запросе писать понятные названия таблиц. Там по коду все понятно. На выполнение запроса она не должна повлиять.

Возможно у меня какие-то проблемы с сетевым соединением. Но тогда почему при записи по строкам это не заметно?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #32 - 07. Сентября 2010 :: 07:26
Печать  
(es3000)
Речь о втором тесте.Так у тебя все время уходит на заполнение промежуточной таблицы. Поставь время еще сколько создается промежуточная таблица а также поставь время "чистого"
рс.ExeSQL_FromTV(лТЗ, пКолвоСтрок)
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #33 - 07. Сентября 2010 :: 07:29
Печать  
Также во втором тесте ты заполняешь все строки сколько есть а
insert даешь на столько строк сколько нужно.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #34 - 07. Сентября 2010 :: 07:33
Печать  
Z1 писал(а) 07. Сентября 2010 :: 07:26:
(es3000)
Речь о втором тесте.Так у тебя все время уходит на заполнение промежуточной таблицы. Поставь время еще сколько создается промежуточная таблица а также поставь время "чистого"
рс.ExeSQL_FromTV(лТЗ, пКолвоСтрок)


У меня там два замера: один выполняется при заполнении промежуточной таблицы, второй выполняется прямо перед текстом запроса.
И в результат выводится именно второй замер.
Так что результат замера правильный

Кроме того, я до этого замерял отдельно заполнение промежуточной таблицы: от 1 до 4 сек. Что по сравнению с общим временем незначительно
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #35 - 07. Сентября 2010 :: 07:37
Печать  
Z1 писал(а) 07. Сентября 2010 :: 07:29:
Также во втором тесте ты заполняешь все строки сколько есть а
insert даешь на столько строк сколько нужно.


не понял...

Я заполняю ТЗ, вызваю метод ВыполнитьSQL_ИзТЗ, и указываю ему какими порциями передавать данные на сервер. Получается что независимо от размера порции, время выполнения больше чем построчно
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #36 - 07. Сентября 2010 :: 07:50
Печать  
es3000 писал(а) 07. Сентября 2010 :: 07:37:
Z1 писал(а) 07. Сентября 2010 :: 07:29:
Также во втором тесте ты заполняешь все строки сколько есть а
insert даешь на столько строк сколько нужно.


не понял...

Я заполняю ТЗ, вызваю метод ВыполнитьSQL_ИзТЗ, и указываю ему какими порциями передавать данные на сервер. Получается что независимо от размера порции, время выполнения больше чем построчно

это я неправильно думал о втором параметре.( я думал что это колво строк всего ).

Тогда ставь второй параметр в  1. Передавая слишком большой пакет сразу что ты выиграешь ?
Все равно все insert (ы)  будут выполняться по одному.
Скорее всего при  передаче больших пакетов происходит больше ошибок и tcp тратит время на передачу ошибочных пакетов заново.
также маленький запрос в одном пакете и он сразу выполняется а большой запрос из многих пакетов надо еще получить и выстроить в нужном порядке.
Все сказаное мое ИХМО.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #37 - 07. Сентября 2010 :: 07:54
Печать  
Если запустить тест на сервере, то результат такой:


Время записи таблицы  документа построчно: 12.146с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 0): 7.361с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 10): 7.218с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 100): 6.597с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 200): 7.397с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 500): 6.722с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 1000): 6.499с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 2000): 7.66с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 5000): 6.71с


Здесь есть прирост производительности.
Данные по сети передавать не нужно.
Получается, что при работе в сети пользоваться "ExeSQL_FromTV" непроизводительно
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #38 - 07. Сентября 2010 :: 07:55
Печать  
es3000 писал(а) 07. Сентября 2010 :: 07:54:
Если запустить тест на сервере, то результат такой:


Время записи таблицы  документа построчно: 12.146с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 0): 7.361с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 10): 7.218с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 100): 6.597с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 200): 7.397с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 500): 6.722с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 1000): 6.499с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 2000): 7.66с
Время записи таблицы  документа при помощи ExeSQL_FromTV (кол-во строк = 5000): 6.71с


Здесь есть прирост производительности.
Получается, что при работе в сети пользоваться "ExeSQL_FromTV" непроизводительно

это потому что tcp пакеты не передаются по сети и потерь их нет.
или может у тебя sql2005 и на сервере sql соеденен по другому протоколу.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #39 - 07. Сентября 2010 :: 07:56
Печать  
es3000 писал(а) 07. Сентября 2010 :: 06:56:
Почему отрицательное число выскочило - х\з

значит компьютер проработал без выключения примерно 50 суток или кратно этому
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #40 - 07. Сентября 2010 :: 07:56
Печать  
es3000 писал(а) 07. Сентября 2010 :: 07:54:
Если запустить тест на сервере, то результат такой:

Здесь есть прирост производительности.
Данные по сети передавать не нужно.
Получается, что при работе в сети пользоваться "ExeSQL_FromTV" непроизводительно

немного не так чем лучше сеть(физическая) тем больше может быть передаваемый запрос без потери производительности ( производительность имеется ввиду производительность сетевого протокола
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #41 - 07. Сентября 2010 :: 08:03
Печать  
trad писал(а) 07. Сентября 2010 :: 07:56:
es3000 писал(а) 07. Сентября 2010 :: 06:56:
Почему отрицательное число выскочило - х\з

значит компьютер проработал без выключения примерно 50 суток или кратно этому


этот тест выполнился за несколько минут
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #42 - 07. Сентября 2010 :: 08:05
Печать  
es3000 писал(а) 07. Сентября 2010 :: 08:03:
trad писал(а) 07. Сентября 2010 :: 07:56:
es3000 писал(а) 07. Сентября 2010 :: 06:56:
Почему отрицательное число выскочило - х\з

значит компьютер проработал без выключения примерно 50 суток или кратно этому


этот тест выполнился за несколько минут

замечательно.

но компьютер работает (и счетчик тикает) даже если тест не выполняется.
  

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #43 - 07. Сентября 2010 :: 08:23
Печать  
es3000 писал(а) 07. Сентября 2010 :: 07:54:
Получается, что при работе в сети пользоваться "ExeSQL_FromTV" непроизводительно

интересно.
надо будет проверит.
и еще сетевой протокол какой используется? посмотри в cliconfg.
  

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



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #44 - 07. Сентября 2010 :: 09:08
Печать  
trad писал(а) 07. Сентября 2010 :: 08:23:
es3000 писал(а) 07. Сентября 2010 :: 07:54:
Получается, что при работе в сети пользоваться "ExeSQL_FromTV" непроизводительно

интересно.
надо будет проверит.
и еще сетевой протокол какой используется? посмотри в cliconfg.


Нету cliconfig, не устанавливал компоненты SQL-сервера
Но в Activity Monitor видно, что протокол - TCP\IP


Если проверишь, отпиши пожалуйста по результатам. Очень интересно. Может быть проблему в сети надо искать
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #45 - 07. Сентября 2010 :: 09:20
Печать  
не cliconfig, а cliconfg
  

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



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #46 - 07. Сентября 2010 :: 09:34
Печать  
да ошибся,
в ней указано TCP\IP
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #47 - 07. Сентября 2010 :: 12:12
Печать  
Проверил.
Сетевой режим.
Цитата:
Версии:
 1с++ 3.2.2.5
 Microsoft SQL Server  2000 - 8.00.760 (Intel X86)
     Dec 17 2002 14:22:05
     Copyright (c) 1988-2003 Microsoft Corporation
     Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 4)

 sql-drv 03.85.1132
 ODBC 03.52

Количество строк в ТЗ: 10000

Построчно. Среднее время: 9.92 сек.
Из ТЗ по 100. Среднее время: 3.82 сек.
Из ТЗ по 1000. Среднее время: 3.58 сек.

Тестовая обработка прилагается.
  

_testSQLfromVT.ert ( 12 KB | Загрузки )

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #48 - 07. Сентября 2010 :: 12:13
Печать  
Вывод: выгрузка из ТЗ выигрывает по времени более чем в 2 раза.
  

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #49 - 07. Сентября 2010 :: 12:17
Печать  
На локальном сервере.
Цитата:
Версии:
  1с++ 3.2.2.5
  Microsoft SQL Server  2000 - 8.00.2055 (Intel X86)
     Dec 16 2008 19:46:53
     Copyright (c) 1988-2003 Microsoft Corporation
     Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)

  sql-drv 03.85.1132
  ODBC 03.52

Количество строк в ТЗ: 10000

Построчно. Среднее время: 4.98 сек.
Из ТЗ по 100. Среднее время: 2.71 сек.
Из ТЗ по 1000. Среднее время: 2.96 сек.
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #50 - 07. Сентября 2010 :: 12:52
Печать  
прогнал тест trad
сетевой режим

1с++ 3.2.2.4
  Microsoft SQL Server  2000 - 8.00.2039 (Intel X86)
     May  3 2005 23:18:38
     Copyright (c) 1988-2003 Microsoft Corporation
     Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

  sql-drv 03.85.1132
  ODBC 03.52

Количество строк в ТЗ: 10000

Построчно. Среднее время: 15.79 сек.
Из ТЗ по 100. Среднее время: 4.67 сек.
Из ТЗ по 1000. Среднее время: 4.63 сек.

Версии:
  1с++ 2.0.3.3
  Microsoft SQL Server  2000 - 8.00.2039 (Intel X86)
     May  3 2005 23:18:38
     Copyright (c) 1988-2003 Microsoft Corporation
     Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

  sql-drv 03.85.1132
  ODBC 03.52

Количество строк в ТЗ: 10000

Построчно. Среднее время: 15.39 сек.
Из ТЗ по 100. Среднее время: 4.88 сек.
Из ТЗ по 1000. Среднее время: 4.49 сек.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #51 - 07. Сентября 2010 :: 12:52
Печать  
На сервере
Версии:
  1с++ 2.0.3.3
  Microsoft SQL Server  2000 - 8.00.2039 (Intel X86)
     May  3 2005 23:18:38
     Copyright (c) 1988-2003 Microsoft Corporation
     Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

  sql-drv 03.86.3959
  ODBC 03.52

Количество строк в ТЗ: 10000

Построчно. Среднее время: 9.28 сек.
Из ТЗ по 100. Среднее время: 4.03 сек.
Из ТЗ по 1000. Среднее время: 3.8 сек.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #52 - 07. Сентября 2010 :: 12:55
Печать  
(es3000) прогони тоже тесты. Тогда можно решить
или особенность твоих данных так влияет на производительность ,
либо у тебя что-то с сетью и/или сервером

тест работает одинакова что на библиотеке 3.2.2
что на 2.0.3
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #53 - 07. Сентября 2010 :: 14:11
Печать  
Прогнал тот же тест по три раза на одном и том же компе под одной и той же 1с.
сетевой режим сравнивал Native Client и стандартное соеденение
результат Native Client лучше
Могу поднять свою ветку по адаптированию 1с++ к Native Client

Версии:
  1с++ 2.0.3.3
  Microsoft SQL Server  2000 - 8.00.2039 (Intel X86)
     May  3 2005 23:18:38
     Copyright (c) 1988-2003 Microsoft Corporation
     Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

  sql-drv 10.00.1600
  ODBC 03.52


Построчно. Среднее время: 15.32 сек.
Из ТЗ по 100. Среднее время: 4.42 сек.
Из ТЗ по 1000. Среднее время: 4.46 сек.

Построчно. Среднее время: 14.96 сек.
Из ТЗ по 100. Среднее время: 4.72 сек.
Из ТЗ по 1000. Среднее время: 4.55 сек.

Построчно. Среднее время: 14.93 сек.
Из ТЗ по 100. Среднее время: 4.29 сек.
Из ТЗ по 1000. Среднее время: 4.31 сек.

Версии:
  1с++ 2.0.3.3
  Microsoft SQL Server  2000 - 8.00.2039 (Intel X86)
     May  3 2005 23:18:38
     Copyright (c) 1988-2003 Microsoft Corporation
     Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

  sql-drv 03.85.1132
  ODBC 03.52

Построчно. Среднее время: 15.5 сек.
Из ТЗ по 100. Среднее время: 4.62 сек.
Из ТЗ по 1000. Среднее время: 5.39 сек.

Построчно. Среднее время: 15.76 сек.
Из ТЗ по 100. Среднее время: 4.88 сек.
Из ТЗ по 1000. Среднее время: 4.55 сек.

Построчно. Среднее время: 15.5 сек.
Из ТЗ по 100. Среднее время: 4.55 сек.
Из ТЗ по 1000. Среднее время: 4.4 сек.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #54 - 07. Сентября 2010 :: 14:35
Печать  
тестовая обработка из 53
  

_testSQLfromVT_001.ert ( 33 KB | Загрузки )
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #55 - 08. Сентября 2010 :: 09:31
Печать  
Мой результат:
Код
Выбрать все
Версии:
  1с++ 3.2.2.0
  Microsoft SQL Server 2005 - 9.00.4053.00 (X64)
	May 26 2009 14:13:01
	Copyright (c) 1988-2005 Microsoft Corporation
	Enterprise Edition (64-bit) on Windows NT 6.0 (Build 6002: Service Pack 2)

  sql-drv 03.85.1132
  ODBC 03.52

Количество строк в ТЗ: 10000

Построчно. Среднее время: 22.1 сек.
Из ТЗ по 100. Среднее время: 117.95 сек.
Из ТЗ по 1000. Среднее время: 196.47 сек.
 


  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #56 - 08. Сентября 2010 :: 09:31
Печать  
значит чего-то у меня с сеткой
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #57 - 08. Сентября 2010 :: 09:32
Печать  
работаю в виртуальной машине VirtualBox, скорее всего в этом причина
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #58 - 08. Сентября 2010 :: 09:55
Печать  
es3000 писал(а) 08. Сентября 2010 :: 09:32:
работаю в виртуальной машине VirtualBox, скорее всего в этом причина

ты работаешь в виртуальной машине или сервер в вирт машине ?

Запусти тест где нет вирт машины ( сетевой ).
Запусти тест на сервере.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #59 - 08. Сентября 2010 :: 10:40
Печать  
Я работаю в виртуальной машине, то есть моя операционка с 1С-кой.
Хост - Windows7,
Гостевая ОС - WindowsXP

Резульат теста в терминале на сервере:
Код
Выбрать все
Версии:
  1с++ 3.2.2.0
  Microsoft SQL Server 2005 - 9.00.4053.00 (X64)
	May 26 2009 14:13:01
	Copyright (c) 1988-2005 Microsoft Corporation
	Enterprise Edition (64-bit) on Windows NT 6.0 (Build 6002: Service Pack 2)

  sql-drv 03.86.3959
  ODBC 03.52

Количество строк в ТЗ: 10000

Построчно. Среднее время: 7.39 сек.
Из ТЗ по 100. Среднее время: 5.53 сек.
Из ТЗ по 1000. Среднее время: 5.19 сек.
 


  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #60 - 08. Сентября 2010 :: 11:00
Печать  
ну раз у тебя все работают на сервере и sql2005
то можешь сравнить на этом тесте протокол tcp/ip
и shared memory.
Вроде shared memory более произволителен так что имеет смысл это проверить и использовать его на сервере как основной протокол
( для соеденения 1с.exe (клиента sql) кто в терминале и sql сервера.)

А по поводу твоей вирт. машины получается что по разному реализованы стеки протокола tcp и время уходит на преобразования
и чем больше порция информации тем больше потери времени.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Не работает ВыполнитьSQL_ИзТЗ
Ответ #61 - 08. Сентября 2010 :: 11:30
Печать  
Это тест с рабочей станции, но без виртуальной мащины:
Код
Выбрать все
Версии:
  1с++ 3.2.2.0
  Microsoft SQL Server 2005 - 9.00.4053.00 (X64)
	May 26 2009 14:13:01
	Copyright (c) 1988-2005 Microsoft Corporation
	Enterprise Edition (64-bit) on Windows NT 6.0 (Build 6002: Service Pack 2)

  sql-drv 03.86.3959
  ODBC 03.52

Количество строк в ТЗ: 10000

Построчно. Среднее время: 23.29 сек.
Из ТЗ по 100. Среднее время: 10.2 сек.
Из ТЗ по 1000. Среднее время: 10.63 сек.
 




То есть все нормально.
Проблема действительно где-то у меня в VirtualBox
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать