Нужна помощь с оптимизацией

1. user5300 1063 13.06.19 16:02 Сейчас в теме
Добрый вечер.
В Управлении Торговлей 10.3 есть документ Отчет о розничных продажах. В Модуле документа находится обработчик "УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров()". При проведении документа, обработчик отрабатывается относительно долгое время (1 документ = 17 сек), (100 доков = 1700 сек и тд), при перепроведении документов возникает хаос...
можно ли как то оптимизировать данный процесс движения по партиям ? никто не сталкивался с такой проблемой ?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
16. Alex_will 37 14.06.19 13:31 Сейчас в теме +1 $m
Данная ситуация стандартная в запросе который формирует таблицу партий есть неоптимальные вещи, которые требуют допилки. Сталкивался с таким в УТ 10.3, УПП - запрос один и тот же. После доработки запроса будет летать. Все регламентные операции типо индексирований тут бессильны. Часто при большом количестве пользователей вылетают ошибки транзацкций
20. rujiy_kot 11 14.06.19 14:56 Сейчас в теме +1 $m
Можно запрос переписать на временные таблицы, например, тут есть пример:
https://forum.mista.ru/topic.php?id=742361&page=2

Указано, что после доработки время выполнения упало с 2-х минут 6 секунд.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 35 13.06.19 16:05 Сейчас в теме
(1)Как минимум сделайте замер производительности, определите что самое долгое выполняется.
3. user5300 1063 13.06.19 16:06 Сейчас в теме
(2)ну вот, этот обработчик занимает 17 сек, остальные процедуры по 2 сек (не критично)
4. Sashares 35 13.06.19 16:10 Сейчас в теме
(3)Под рукой УТ увы нет.
Что в этом обработчике? Запрос дольше всего выполняется?
Возможно можно запрос оптимизировать.
Но для этого надо видеть текст запроса.
6. user5300 1063 13.06.19 16:14 Сейчас в теме
(4)текст типовой, происходит движения по регистрам партии
вот текст:
// Процедура-вход для всех документов. Проводит переданный документ по учету партий товаров
//
// Параметры
//  ОбрабатываемыйДокумент - проводимый документ
//
Процедура ДвижениеПартийТоваров(ОбрабатываемыйДокумент, ТаблицаСписания = Неопределено,
								КоличествоСтрокВДокументе = 0, Упр = Истина,
								Бух = Истина, Нал = Истина,
								Останавливаться = Ложь, ПроведениеОстановлено = Ложь,
								ДокументМоментВремени = Неопределено, СписаниеВыполняетсяОбработкой = Ложь,
								СтруктураНаборовЗаписей = Неопределено) Экспорт
								
	
	// Если не переданы строки документа, выбираем из базы.
	Если ТаблицаСписания = Неопределено Тогда
		
		// Таблица строк документов списания
		ТаблицаСписания = ПолучитьТаблицуСтрокДокументов(ОбрабатываемыйДокумент, Упр, Бух, Нал);
		
	КонецЕсли;
	
	КоличествоСтрокВДокументе = ТаблицаСписания.Количество();

	СтруктураПараметров = Новый Структура;
	
	СтруктураДата = Новый Структура("Дата");
	ПолучитьРеквизитыОбъекта(ОбрабатываемыйДокумент, СтруктураДата);
	
	Если ДокументМоментВремени = Неопределено Тогда
		ДокументМоментВремени = Новый МоментВремени(СтруктураДата.Дата, ОбрабатываемыйДокумент);
	КонецЕсли; 
	
	СтруктураПараметров.Вставить("УчетнаяПолитика", ПолучитьУчетнуюПолитику(ДокументМоментВремени));
	
	Если КоличествоСтрокВДокументе > 0 Тогда
		
		СтруктураПараметров.Вставить("ТекстСообщений", "");
		
		СтруктураПараметров.Вставить("Отказ", Ложь);
		
		СтруктураПараметров.Вставить("ЕстьСтрокиОтражатьВУправленческомУчете", 	ТаблицаСписания.Найти(Истина, "ОтражатьВУправленческомУчете")<>Неопределено);
		СтруктураПараметров.Вставить("ЕстьСтрокиОтражатьВБухгалтерскомУчете", 	ТаблицаСписания.Найти(Истина, "ОтражатьВБухгалтерскомУчете")<>Неопределено);
		СтруктураПараметров.Вставить("ЕстьСтрокиОтражатьВНалоговомУчете", 		ТаблицаСписания.Найти(Истина, "ОтражатьВНалоговомУчете")<>Неопределено);
		
		СтруктураПараметров.Вставить("ВестиПартионныйУчетПоСкладам", УчетнаяПолитика("ВестиПартионныйУчетПоСкладам","Упр",,СтруктураПараметров));
		
		Если НЕ СтруктураПараметров.ЕстьСтрокиОтражатьВУправленческомУчете Тогда
			Возврат;
		КонецЕсли;	
		
		Если СтруктураНаборовЗаписей = Неопределено Тогда
		
			// Движения - наборы записей по регистрам
			СоздатьНаборыЗаписей(СтруктураПараметров);
			
		Иначе
			
			Для каждого Элемент Из СтруктураНаборовЗаписей Цикл

				СтруктураПараметров.Вставить(Элемент.Ключ, Элемент.Значение);
	
			КонецЦикла;
		
		КонецЕсли; 
	
		ПодготовитьТаблицуСписания(СтруктураПараметров, ТаблицаСписания, Упр, Бух, Нал);
		Сообщить(ТаблицаСписания.Количество());
		Строка0 = ТаблицаСписания[0];
		
		Если НЕ ЗначениеЗаполнено(Строка0.Регистратор) Тогда
			ТаблицаСписания.ЗаполнитьЗначения(ОбрабатываемыйДокумент, "Регистратор");
		КонецЕсли;
		Если НЕ ЗначениеЗаполнено(Строка0.Период) Тогда
			ТаблицаСписания.ЗаполнитьЗначения(СтруктураДата.Дата, "Период");
		КонецЕсли;
		
		ВыполнитьСписание(СтруктураПараметров, ТаблицаСписания, ДокументМоментВремени, Останавливаться, ПроведениеОстановлено);
		
	КонецЕсли;
	
	// Сдвиг границы последовательности осуществляется только при онлайновом списании партий
	// либо из обработки проведение по партиям.
	ЗакрытиеЗаказовПокупателей = ТипЗнч(ОбрабатываемыйДокумент) = Тип("ДокументСсылка.ЗакрытиеЗаказовПокупателей");

	Если СписаниеВыполняетсяОбработкой Или СтруктураПараметров.УчетнаяПолитика[0].СписыватьПартииПриПроведенииДокументовУпр Тогда
		
		Если Упр Тогда
			
			СдвигатьГраницу = ОпределитьНеобходимостьСдвигаГраницы(ДокументМоментВремени,"Упр");
			
			Если СдвигатьГраницу Тогда
				Последовательности.ПартионныйУчет.УстановитьГраницу(ДокументМоментВремени);
			КонецЕсли;
			
		КонецЕсли;
			
	КонецЕсли;
	
КонецПроцедуры // ДвижениеПартийТоваров()

Показать
5. user930087 13.06.19 16:14 Сейчас в теме
(1) иногда встречал подобное, когда последовательность не восстановлена и остатков по партиям миллиард
7. user5300 1063 13.06.19 16:16 Сейчас в теме
(5)Остатки относительно ровные, движения по регистрам при перепроведении занимает долгое время,
20. rujiy_kot 11 14.06.19 14:56 Сейчас в теме +1 $m
Можно запрос переписать на временные таблицы, например, тут есть пример:
https://forum.mista.ru/topic.php?id=742361&page=2

Указано, что после доработки время выполнения упало с 2-х минут 6 секунд.
21. user5300 1063 14.06.19 15:07 Сейчас в теме
8. Dream_kz 129 13.06.19 16:33 Сейчас в теме +0.15 $m
1. Вариант самый простой, делать списание партий не при проведении документов, а регламентно по ночам (галочка в настройках)
2. Вариант второй, включать замер, искать длительные запросы, оптимизировать их. Возможно, итоги не рассчитаны, либо статистика тухлая, тут уже надо план запроса смотреть
singlych; +1 Ответить
9. user5300 1063 13.06.19 16:47 Сейчас в теме
(8)
регламентно по ночам (галочка в настройках)

можно конкретнее ?
10. user5300 1063 13.06.19 16:52 Сейчас в теме
(8)
Вариант самый простой, делать списание партий не при проведении документов, а регламентно по ночам (галочка в настройках)

Это получается, при регламентных операциях, если пользователь внесет поправки задним числом - при проведении это не учтётся ?)
11. Dream_kz 129 13.06.19 17:17 Сейчас в теме
(10) Должна быть настройка Списывать партии при проведении документов и обработка Проведение по партиям.
Если галку снимаем, по регистру ПартииТоваровНаСкладах движения не делаются, их надо будет делать этой обработкой, сама она запускаться не будет, но можно написать регламентное, которое будет ее вызывать

По поводу задним числом, будут проводиться документы по всей последовательности, т.е залезли в прошлый месяц, то документы с прошлого месяца
14. user5300 1063 14.06.19 07:53 Сейчас в теме
(11)
т.е залезли в прошлый месяц, то документы с прошлого месяца

Документы понятно, а движения то не изменятся...
12. starik-2005 3087 13.06.19 17:28 Сейчас в теме
1. Сделать реструктуризацию.
2. Пересчитать итоги.

Если скульная база, то произвести реструктуризацию ИБ через ТиИ, запустить на SQL регламенты, рекомендованные 1С (index rebuild, statistic update). Сделать ежедневный регламент обновления статистики и reindex, раз в неделю - index rebuild.

Если база файловая, то сделать все через ТиИ - там есть пересчет итогов.
13. user5300 1063 14.06.19 07:50 Сейчас в теме
(12) конфа переделанная, изменений много очень за 10-12 лет... не слетит все это ?) база sql
15. biker1052 14.06.19 12:48 Сейчас в теме
Еще бывают тормоза при использовании обмена данными. При пересчете возможно именно на участке регистрации в обмене данными жуткие тормоза.
16. Alex_will 37 14.06.19 13:31 Сейчас в теме +1 $m
Данная ситуация стандартная в запросе который формирует таблицу партий есть неоптимальные вещи, которые требуют допилки. Сталкивался с таким в УТ 10.3, УПП - запрос один и тот же. После доработки запроса будет летать. Все регламентные операции типо индексирований тут бессильны. Часто при большом количестве пользователей вылетают ошибки транзацкций
17. user5300 1063 14.06.19 14:02 Сейчас в теме
Решил переделать типовые процедуры проводок по регистрам.
18. Alex_will 37 14.06.19 14:45 Сейчас в теме
(17) Зря лучше запрос поправить по формированию партий под списание. Можно накосорезить что потом данные не свести
19. user5300 1063 14.06.19 14:47 Сейчас в теме
(18) там вроде нет таких сложных запросов , выгружается таблица и прогоняется по всем доступным регистрам как я понял
Оставьте свое сообщение

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