Добрый день всем. Дали на сопровождение базу (кочует с 7.7, пытались переводить "по живому" на управляемое приложение из обычного, добрались до версии 1с 8.3.8.1933 и спихнули мне), в которой обнаружились "тормоза". Замером производительности нашел где:
всего = тбНачисления.Количество();
сч = 1;
Удаления = Новый Массив;
Пока сч <= всего Цикл
Удаления.Очистить();
строка = тбНачисления[сч - 1];
Для каждого стрНач Из тбНачисления Цикл
Если строка.ВидРасчета <> ПланыВидовРасчета.НачисленияНаФОТ.НайтиПоКоду("КМР")
И строка.ВидРасчета <> ПланыВидовРасчета.НачисленияНаФОТ.ЕСВФОТБольничные
И строка.ВидРасчета <> ПланыВидовРасчета.НачисленияНаФОТ.НайтиПоНаименованию("ЕСВ ФОТ (больничные инвалиды)")
И стрНач.ВидРасчета = ПланыВидовРасчета.НачисленияНаФОТ.НайтиПоКоду("КМР")
И стрНач.ФизЛицо = строка.ФизЛицо Тогда
Попытка
Если стрНач.БазаРасчета <> строка.БазаРасчета
И стрНач.БазаРасчетаВсего <> строка.БазаРасчетаВсего Тогда
Удаления.Добавить("Истина");
Иначе
Удаления.Добавить("Ложь");
КонецЕсли;
Исключение
Продолжить;
КонецПопытки;
КонецЕсли;
Если строка.ВидРасчета = ПланыВидовРасчета.НачисленияНаФОТ.ЕСВФОТБольничные
И стрНач.ВидРасчета = ПланыВидовРасчета.НачисленияНаФОТ.ЕСВФОТБольничные
И стрНач.ФизЛицо = строка.ФизЛицо Тогда
Если стрНач.ДатаНачала = строка.ДатаНачала
И стрНач.ДатаОкончания = строка.ДатаОкончания
И стрНач.Результат > строка.Результат Тогда
Удаления.Добавить("Истина");
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Удаления.Найти("Ложь") = Неопределено И Удаления.Количество() <> 0 Тогда
тбНачисления.Удалить(сч - 1);
всего = всего - 1;
Иначе
сч = сч + 1;
КонецЕсли;
КонецЦикла;
С одной стороны вроде логично со счетчиком это все очищать от лишних записей, но когда сия зараза вызывается почти 2 миллиона раз это занимает почти 2 часа (по словам бухгалтера, замером производительности результат получился около 5000 секунд). Если честно, сам с 1с не настолько давно работаю и более оптимального варианта не знаю, потому прошу помощи, каким образом это вот чудо можно переписать, чтобы оно быстрее работало?
Уточню, конкретно тормозят строки
Если строка.ВидРасчета <> ПланыВидовРасчета.НачисленияНаФОТ.НайтиПоКоду("КМР")
и
И строка.ВидРасчета <> ПланыВидовРасчета.НачисленияНаФОТ.НайтиПоНаименованию("ЕСВ ФОТ (больничные инвалиды)")
Сообщение отредактировал Vofka - 31.07.16, 20:03