|
v7: Начало тормозить при формировании отчёта. | ☑ | ||
---|---|---|---|---|
0
Роспатнюк Сергей Сер
30.05.19
✎
14:28
|
Добрый день недавно начал тормозить один отчет, ну я сразу подумал что наверно кто то запилил запрос в цикл но нет, сделал замер вот что показывает, подскажите как это можно исправить.
\\TERM02\1C_BASES\TEST\POD_TEST\EXTFORMS\ДВИЖЕНИЕ МАТЕРИАЛА (НОВЫЙ).ERT 1288 Если Материал.ЭтоГруппа() = 1 Тогда 54573 27.938319 23.97 \\TERM02\1C_BASES\TEST\POD_TEST\EXTFORMS\ДВИЖЕНИЕ МАТЕРИАЛА (НОВЫЙ).ERT 1271 Ит.ВыбратьСубконто(ВидыСубконто.Материалы); 1460 25.825278 22.16 \\TERM02\1C_BASES\TEST\POD_TEST\EXTFORMS\ДВИЖЕНИЕ МАТЕРИАЛА (НОВЫЙ).ERT 1248 Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, СписокСчетов, , , , "Проводка", 1 + 4); 2 22.577485 19.37 \\TERM02\1C_BASES\TEST\POD_TEST\EXTFORMS\ДВИЖЕНИЕ МАТЕРИАЛА (НОВЫЙ).ERT 1304 ОборотСумма = ОборотСумма + Ит.КО(1); 54518 11.804140 10.13 \\TERM02\1C_BASES\TEST\POD_TEST\EXTFORMS\ДВИЖЕНИЕ МАТЕРИАЛА (НОВЫЙ).ERT 1261 Ит.ВыбратьСубконто(ВидыСубконто.Сотрудники); 346 4.588984 3.94 \\TERM02\1C_BASES\TEST\POD_TEST\EXTFORMS\ДВИЖЕНИЕ МАТЕРИАЛА (НОВЫЙ).ERT 1249 Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения); 1 4.278884 3.67 Код процедуры ЗаголовокОтчёта = " % использования "; Несн = СоздатьОбъект("ТаблицаЗначений"); СписокНеснижаемых(Несн); //--- Подготовка ТЗ с идентичными отчёту колонками Если 1 = 1 Тогда ТаблицаДляСортировки = СоздатьОбъект("ТаблицаЗначений"); ТаблицаДляСортировки.НоваяКолонка("НПП"); ТаблицаДляСортировки.НоваяКолонка("Код"); ТаблицаДляСортировки.НоваяКолонка("Артикул"); //ТаблицаДляСортировки.НоваяКолонка("МестаХранения"); //ТаблицаДляСортировки.НоваяКолонка("Сотрудник"); ТаблицаДляСортировки.НоваяКолонка("Материал"); ТаблицаДляСортировки.НоваяКолонка("Ед_Изм"); ТаблицаДляСортировки.НоваяКолонка("ОстатокНач"); ТаблицаДляСортировки.НоваяКолонка("ПриходКол"); ТаблицаДляСортировки.НоваяКолонка("РасходКол"); ТаблицаДляСортировки.НоваяКолонка("ОстатокКон"); ТаблицаДляСортировки.НоваяКолонка("СуммаНач"); ТаблицаДляСортировки.НоваяКолонка("СуммаКон"); ТаблицаДляСортировки.НоваяКолонка("СуммаДвижПриход"); ТаблицаДляСортировки.НоваяКолонка("СуммаДвижРасхода"); ТаблицаДляСортировки.НоваяКолонка("Использовано"); КонецЕсли; //--- Подготовка ТЗ с идентичными отчёту колонками (конец) СпМатериалов = СоздатьОбъект("СписокЗначений"); Несн.Выгрузить(спМатериалов, , , "материал"); Состояние("расчет итогов"); Оборотсумма = 0; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать2"); Ит = СоздатьОбъект("БухгалтерскиеИтоги"); //Если ВклСклад = 0 Тогда // //ИначеЕсли Склад.Выбран() = 1 Тогда // // // Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения, Склад, , 0); //Иначе // // // Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения); //КонецЕсли; Если ВклМОЛ = 0 Тогда ИначеЕсли МОЛ.выбран() = 1 Тогда Ит.ИспользоватьСубконто(ВидыСубконто.Сотрудники, МОЛ, , 0); Иначе Ит.ИспользоватьСубконто(ВидыСубконто.Сотрудники); КонецЕсли; Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения, Склад, , 1); Ит.ИспользоватьСубконто(ВидыСубконто.Материалы, сзМатериалы, 1, флгВыводитьГруппы); //Если (Движ = 1) ИЛИ (Ист = 1) Тогда // // // Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, СписокСчетов, , , , "Проводка", 1 + 4); //Иначе // // // Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, СписокСчетов, , , , , "К"); //КонецЕсли; Сформировать_Колонки("Заголовок"); Сформировать_Колонки("Шапка"); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); НПП = 0; Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, СписокСчетов, , , , "Проводка", 1 + 4); Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения); Сч = 1; Пока Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения) = 1 Цикл Если (ВыводитьМестаХранения = 1) Тогда Сформировать_Колонки("Субконто1"); КонецЕсли; Ит.ВыбратьСубконто(ВидыСубконто.Сотрудники); Пока Ит.ПолучитьСубконто(ВидыСубконто.Сотрудники) = 1 Цикл Если (ВыводитьСотрудников = 1) Тогда Сформировать_Колонки("Субконто2"); КонецЕсли; Ит.ВыбратьСубконто(ВидыСубконто.Материалы); Пока Ит.ПолучитьСубконто(ВидыСубконто.Материалы) = 1 Цикл Если ФлУд = 1 Тогда Если Ит.Субконто(ВидыСубконто.Материалы).ПометкаУдаления() = 0 Тогда Продолжить; КонецЕсли; КонецЕсли; НПП = НПП + 1; Материал = Ит.Субконто(3); Если Материал.ЭтоГруппа() = 1 Тогда Если ФлгВыборГруппы = 1 Тогда Сформировать_Колонки("Субконто3Группа"); КонецЕсли; Продолжить; Иначе Материал = Ит.Субконто(3); Если Несн.НайтиЗначение(материал, , ) = 0 Тогда ОборотСумма = ОборотСумма + Ит.КО(1); ПриходСумма = ПриходСумма + Ит.до(1); Конец = Конец + Ит.СКД(1) - Ит.СКК(1); Начало = Начало + Ит.СНД(1) - Ит.СНК(1); Колначало = Колначало + Ит.СНД(3) - Ит.СНК(3); Колконец = Колконец + Ит.СКД(3) - Ит.СКК(3); РасходКол = РасходКол + Ит.КО(3); ПриходКол = ПриходКол + Ит.до(3); КонецЕсли; КонецЕсли; //--- Запись строки в таблицу значений Если 1 = 1 Тогда //Вр = Ит.СНД(3) - Ит.СНК(3) + Ит.ДО(3); //Процент = 100 * (Ит.КО(3) / ?(Вр = 0, 1, Вр); ОстатокНач = Ит.СНД(3) - Ит.СНК(3); ПриходКол = Ит.ДО(3); РасходКол = Ит.КО(3); Вр = ОстатокНач + ПриходКол; Попытка Процент = 100 * РасходКол / ?(Вр <> 0, Вр, 1); Исключение Сообщить("Ошибка: ОстатокНач + ПриходКол = " + Строка(Вр) + " " + Строка(Материал) ); Процент = 9999; КонецПопытки; //Процент = ?(Процент > 100, 100, Процент); //--- Отбор по процентам Если 1 = 1 Тогда Если (ПроцентОт > 0) И (Процент < ПроцентОт) Тогда Продолжить; КонецЕсли; Если (ПроцентДо < 100) И (Процент > ПроцентДо) Тогда Продолжить; КонецЕсли; КонецЕсли; //--- Отбор по процентам (Конец) ТаблицаДляСортировки.НоваяСтрока(); ТаблицаДляСортировки.НПП = НПП; ТаблицаДляСортировки.Код = Материал.Код; ТаблицаДляСортировки.Артикул = Материал.Арт; ТаблицаДляСортировки.Материал = Материал; ТаблицаДляСортировки.Ед_Изм = Материал.ЕдиницаИзмерения; //ТаблицаДляСортировки.ОстатокНач = Ит.СНД(3) - Ит.СНК(3); //ТаблицаДляСортировки.ПриходКол = Ит.ДО(3); //ТаблицаДляСортировки.РасходКол = Ит.КО(3); ТаблицаДляСортировки.ОстатокНач = ОстатокНач; ТаблицаДляСортировки.ПриходКол = ПриходКол; ТаблицаДляСортировки.РасходКол = РасходКол; ТаблицаДляСортировки.ОстатокКон = Ит.СКД(3) - Ит.СКК(3); ТаблицаДляСортировки.СуммаНач = Формат(Ит.СНД(1) - Ит.СНК(1), "Ч15.2, "); ТаблицаДляСортировки.СуммаКон = Формат(Ит.СКД(1) - Ит.СКК(1), "Ч15.2, "); ТаблицаДляСортировки.СуммаДвижПриход = Формат(Ит.ДО(1), "Ч15.2, "); ТаблицаДляСортировки.СуммаДвижРасхода = Формат(Ит.КО(1), "Ч15.2, "); ТаблицаДляСортировки.Использовано = Формат(Процент, "Ч15.0, "); КонецЕсли; //--- Запись строки в таблицу значений (Конец) Если (Движ = 1) ИЛИ (Ист = 1) Тогда Ит.ВыбратьПериоды(); Пока Ит.ПолучитьПериод() = 1 Цикл Если Движ = 1 Тогда Док = Строка(Ит.Операция.Документ) + "; "; Срок = СрокИзДат(Ит.Операция.Документ.ДатаДок); Иначе Док = ""; КонецЕсли; Если Ист = 1 Тогда Если Ит.ДО(3) > 0 Тогда Источник = Строка(Ит.Операция.Кредит.МестаХранения); Иначе Источник = Строка(Ит.Операция.Дебет.МестаХранения); КонецЕсли; Иначе Источник = ""; КонецЕсли; Сформировать_Колонки("Док"); КонецЦикла; // ит.получитьПериод()= 1 Цикл КонецЕсли; // (движ = 1) или (Ист = 1) Тогда КонецЦикла; // Ит.ПолучитьСубконто(ВидыСубконто.Материалы)= 1 Цикл Если (ВыводитьМестаХранения = 1) И (ВыводитьСотрудников = 1) Тогда ВывестиГруппу(ТаблицаДляСортировки, Сч); КонецЕсли; КонецЦикла; // Ит.ПолучитьСубконто(ВидыСубконто.Сотрудники)= 1 Цикл Если ВыводитьСотрудников = 0 Тогда ВывестиГруппу(ТаблицаДляСортировки, Сч); КонецЕсли; КонецЦикла; // Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения)= 1 Цикл Если (ВыводитьМестаХранения = 0) И (ВыводитьСотрудников = 0) Тогда ВывестиГруппу(ТаблицаДляСортировки, Сч); КонецЕсли; Расход = ОборотСумма; Приход = ПриходСумма; в = Конец; г = Начало; д = КолНачало; е = КолКонец; а = РасходКол; б = ПриходКол; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); ПостОбработкаТаблицы(Таб, 6, 15, 4,,1,1); Таб.Показать("Сформировать2", ""); |
|||
1
Роспатнюк Сергей Сер
30.05.19
✎
14:45
|
(0) Да уж а еще не пятницо а бух забыл склад выбрать вот и долго формирует. Закрыто.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |