Provider=VFPOLEDB.1;Data Source= Вдруг резко начало тормозить 1С 7.7

1. zoeh 31 04.12.24 16:46 Сейчас в теме
Процедура ПодключитьДвижок()
	ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"1cpp.dll");

	ОлеДБ = СоздатьОбъект("OLEDBData");
	Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
	Рез = ОлеДБ.Соединение(Соединение);
	Запрос = ОлеДБ.СоздатьКоманду();
	Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");
	Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
	Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
	Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')"); 
	
	мд = СоздатьОбъект("MetaDataWork");
КонецПроцедуры // ПодключитьДвижок




	Если (Быстро=1) и (ПустоеЗначение(ВыбФирма) = 1) и (ПустоеЗначение(ВыбСклад) = 1) и (МонопольныйРежим()=0) Тогда
		ТекстЗапроса="
		|sel ect
		|     $Итоги.Количество КонОст
		|    FR OM
		|        $РегистрИтоги.ОстаткиТМЦ Итоги
		|    WHERE
		|        DTOS(Итоги.period)+$Итоги.Номенклатура
		|        LIKE  (DTOS(:ПредПериод~~)+:Номенклатура)
		|";
		//мд = СоздатьОбъект("MetaDataWork");
		НачПериод = мд.ПолучитьНачПериода(ПолучитьДатуТА());
		
		Запрос.УстановитьТекстовыйПараметр("ПредПериод",НачПериод);
		Запрос.УстановитьТекстовыйПараметр("Номенклатура",ТоварОстатка);
		ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
		Рез = 0;
		Если ТипЗначенияСтр(ТЗ)="ТаблицаЗначений" Тогда
			Если ТЗ.КоличествоСтрок()=1 Тогда
				Рез = ТЗ.ПолучитьЗначение(1,1);
				
			ИначеЕсли ТЗ.КоличествоСтрок()>1 Тогда	
				Рез = ТЗ.Итог(1);
			КонецЕсли;
		КонецЕсли;
		ТекстЗапроса="
		|sel ect
		|     $Итоги.Количество КонОст
		|    FR OM
		|        $РегистрИтоги.РезервыТМЦ Итоги
		|    WHERE
		|        DTOS(Итоги.period)+$Итоги.Номенклатура
		|        LIKE  (DTOS(:ПредПериод~~)+:Номенклатура)
		|";
//		мд = СоздатьОбъект("MetaDataWork");
		НачПериод = мд.ПолучитьНачПериода(ПолучитьДатуТА());
		
		Запрос.УстановитьТекстовыйПараметр("ПредПериод",НачПериод);
		Запрос.УстановитьТекстовыйПараметр("Номенклатура",ТоварОстатка);
		ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
		Рез_2 = 0;
		Если ТипЗначенияСтр(ТЗ)="ТаблицаЗначений" Тогда
			Если ТЗ.КоличествоСтрок()=1 Тогда
				Рез_2 = ТЗ.ПолучитьЗначение(1,1);
				
			ИначеЕсли ТЗ.КоличествоСтрок()>1 Тогда	
				Рез_2 = ТЗ.Итог(1);
			КонецЕсли;
		КонецЕсли;
		
		
	ИначеЕсли (Быстро=1) и (ПустоеЗначение(ВыбФирма) = 1) и (ПустоеЗначение(ВыбСклад) = 0) и (МонопольныйРежим()=0) Тогда
		ТекстЗапроса="
		|select
		|     $Итоги.Количество КонОст
		|    FR OM
		|        $РегистрИтоги.ОстаткиТМЦ Итоги
		|    WH ERE
		|        DTOS(Итоги.period)+$Итоги.Номенклатура+$Итоги.Склад
		|        LIKE  (DTOS(:ПредПериод~~)+:Номенклатура+:Склад) 
		|";
		//мд = СоздатьОбъект("MetaDataWork");
		НачПериод = мд.ПолучитьНачПериода(ПолучитьДатуТА());
		
		Запрос.УстановитьТекстовыйПараметр("ПредПериод",НачПериод);
		Запрос.УстановитьТекстовыйПараметр("Номенклатура",ТоварОстатка);
		Запрос.УстановитьТекстовыйПараметр("Склад",ВыбСклад);
		ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
		Рез = 0;
		Если ТипЗначенияСтр(ТЗ)="ТаблицаЗначений" Тогда
			Если ТЗ.КоличествоСтрок()=1 Тогда
				Рез = ТЗ.ПолучитьЗначение(1,1);
				
			ИначеЕсли ТЗ.КоличествоСтрок()>1 Тогда	
				Рез = ТЗ.Итог(1);
			КонецЕсли;
		КонецЕсли;
		ТекстЗапроса="
		|select
		|     $Итоги.Количество КонОст
		|    FR OM
		|        $РегистрИтоги.РезервыТМЦ Итоги
		|    WH ERE
		|        DTOS(Итоги.period)+$Итоги.Номенклатура+$Итоги.Склад
		|        LIKE  (DTOS(:ПредПериод~~)+:Номенклатура+:Склад)
		|";
		//мд = СоздатьОбъект("MetaDataWork");
		НачПериод = мд.ПолучитьНачПериода(ПолучитьДатуТА());
		
		Запрос.УстановитьТекстовыйПараметр("ПредПериод",НачПериод);
		Запрос.УстановитьТекстовыйПараметр("Номенклатура",ТоварОстатка);
		Запрос.УстановитьТекстовыйПараметр("Склад",ВыбСклад);
		ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
		Рез_2 = 0;
		Если ТипЗначенияСтр(ТЗ)="ТаблицаЗначений" Тогда
			Если ТЗ.КоличествоСтрок()=1 Тогда
				Рез_2 = ТЗ.ПолучитьЗначение(1,1);
				
			ИначеЕсли ТЗ.КоличествоСтрок()>1 Тогда	
				Рез_2 = ТЗ.Итог(1);
			КонецЕсли;
		КонецЕсли;
	Иначе


Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. zoeh 31 04.12.24 17:04 Сейчас в теме
в копии базы которая сделана пару мес назад скорость нормальная. т.е. провайдер стал тормозить из за превышения размера таблицы, причем размер базы всего 3 гб.
3. user-z99999 72 04.12.24 17:10 Сейчас в теме
(2) Проверьте, что это из-за размера таблицы.
Обратитесь к маленькой табличке, проверьте скорость.

А может индекс ... пропал.
4. zoeh 31 04.12.24 17:43 Сейчас в теме
(3) Знать бы где там индексы я вообще вижу запрос 8.3.
Выбрать
$Итоги.Количество КонОст
ИЗ
$РегистрИтоги.ОстаткиТМЦ Итоги
ГДЕ



дальше русский яз. заканчивается начинаются условия без запятых и что то из 8.3 LIKE-ПОДОБНО
DTOS по ходу какие то преобразования

DTOS(Итоги.period)+$Итоги.Номенклатура+$Итоги.Склад
        LIKE  (DTOS(:ПредПериод~~)+:Номенклатура+:Склад)
5. zoeh 31 04.12.24 17:46 Сейчас в теме
Допёрло
ПОЛЯ:
DTOS(Итоги.period)+$Итоги.Номенклатура+$Итоги.Склад
ЗНАЧЕНИЯ  ФИЛЬТРА
LIKE (DTOS(:ПредПериод~~)+:Номенклатура+:Склад)

раз LIKE - ПОДОБНО
значит он строки сравнивает? это же наверное медленно?

по опыту 8.х ПОДОБНО ваще медленная штука
6. zoeh 31 05.12.24 07:15 Сейчас в теме
Дело было в испорченной таблице, ТииБ помогло

именно были ошибки в наименованиях номенклатуры,

еще в передаче параметров добавил СОКРЛП(ТоварОстатка)

т.к. запрос работает сугубо по строкам

Причем изначально было предположение на увеличение размера какой то таблицы, удаление помеченных сжатие и чистка таблиц не помогла.
7. zoeh 31 05.12.24 14:31 Сейчас в теме
Нифига я не решил! а тупо со своим СокрЛП() сделал передачу несуществующей переменной в связи с чем запрос тупо стал быстрее рабоать.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот