- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
Для каждого СтрГотИзд Из ГотовыеИзделия Цикл
СсылкаДСЕ = ОпределитьДСЕГотовоеИзделиеПоНаименованию(СтрГотИзд.Значение);
СсылкаЗаписьРС = НайтиПервуюЗаписьРС_ПоДСЕ(СсылкаДСЕ, ЭтотОбъект.НаДату);
Если СсылкаЗаписьРС = Неопределено Тогда
Предупреждение("На эту дату данных не существует!");
Иначе
ФормаИндикатора.КомментарийОбработкиДанных = "Построение отчета: " + СсылкаДСЕ.ВидПредмета + " - " + СсылкаДСЕ.Наименование + "";
ОбластьДанныеДобавить(ПолеТабДок, ОбластьДанные1, 1, СсылкаДСЕ, СсылкаЗаписьРС.Применяемость, Неопределено, ФормаИндикатора);
Выборка2Ур = НайтиЗаписиРС_ПоКодуДСЕГл(СсылкаЗаписьРС.НомерЗаписиРСДСЕВх, НаДату).Выбрать();
Пока Выборка2Ур.Следующий() цикл
ОбластьДанныеДобавить(ПолеТабДок, ОбластьДанные2, 2, Выборка2Ур.ДСЕВходящий, Выборка2Ур.Применяемость, Выборка2Ур, ФормаИндикатора);
Выборка3Ур = НайтиЗаписиРС_ПоКодуДСЕГл(Выборка2Ур.НомерЗаписиРСДСЕВх, НаДату).Выбрать();
Пока Выборка3Ур.Следующий() цикл
ОбластьДанныеДобавить(ПолеТабДок, ОбластьДанные3, 3, Выборка3Ур.ДСЕВходящий, Выборка3Ур.Применяемость, Выборка3Ур, ФормаИндикатора);
Выборка4Ур = НайтиЗаписиРС_ПоКодуДСЕГл(Выборка3Ур.НомерЗаписиРСДСЕВх, НаДату).Выбрать();
Пока Выборка4Ур.Следующий() цикл
ОбластьДанныеДобавить(ПолеТабДок, ОбластьДанные4, 4, Выборка4Ур.ДСЕВходящий, Выборка4Ур.Применяемость, Выборка4Ур, ФормаИндикатора);
Выборка5Ур = НайтиЗаписиРС_ПоКодуДСЕГл(Выборка4Ур.НомерЗаписиРСДСЕВх, НаДату).Выбрать();
Пока Выборка5Ур.Следующий() цикл
ОбластьДанныеДобавить(ПолеТабДок, ОбластьДанные5, 5, Выборка5Ур.ДСЕВходящий, Выборка5Ур.Применяемость, Выборка5Ур, ФормаИндикатора);
Выборка6Ур = НайтиЗаписиРС_ПоКодуДСЕГл(Выборка5Ур.НомерЗаписиРСДСЕВх, НаДату).Выбрать();
Пока Выборка6Ур.Следующий() цикл
ОбластьДанныеДобавить(ПолеТабДок, ОбластьДанные6, 6, Выборка6Ур.ДСЕВходящий, Выборка6Ур.Применяемость, Выборка6Ур, ФормаИндикатора);
Выборка7Ур = НайтиЗаписиРС_ПоКодуДСЕГл(Выборка6Ур.НомерЗаписиРСДСЕВх, НаДату).Выбрать();
Пока Выборка7Ур.Следующий() цикл
ОбластьДанныеДобавить(ПолеТабДок, ОбластьДанные7, 7, Выборка7Ур.ДСЕВходящий, Выборка7Ур.Применяемость, Выборка7Ур, ФормаИндикатора);
Выборка8Ур = НайтиЗаписиРС_ПоКодуДСЕГл(Выборка7Ур.НомерЗаписиРСДСЕВх, НаДату).Выбрать();
Пока Выборка8Ур.Следующий() цикл
ОбластьДанныеДобавить(ПолеТабДок, ОбластьДанные8, 8, Выборка8Ур.ДСЕВходящий, Выборка8Ур.Применяемость, Выборка8Ур, ФормаИндикатора);
Выборка9Ур = НайтиЗаписиРС_ПоКодуДСЕГл(Выборка8Ур.НомерЗаписиРСДСЕВх, НаДату).Выбрать();
Пока Выборка9Ур.Следующий() цикл
ОбластьДанныеДобавить(ПолеТабДок, ОбластьДанные9, 9, Выборка9Ур.ДСЕВходящий, Выборка9Ур.Применяемость, Выборка9Ур, ФормаИндикатора);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Функция НайтиЗаписиРС_ПоКодуДСЕГл(КодДСЕГл, НаДату, ДопустимаяЗамена = 0) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СтруктураПриборов1СрезПоследних.ДСЕГлавный,
| СтруктураПриборов1СрезПоследних.ДСЕВходящий КАК ДСЕВходящий,
| СтруктураПриборов1СрезПоследних.Прибор,
| СтруктураПриборов1СрезПоследних.НомерЗаписиРСДСЕВх,
| СтруктураПриборов1СрезПоследних.НомерЗаписиРСДСЕГл,
| СтруктураПриборов1СрезПоследних.ДопустимаяЗамена,
| СтруктураПриборов1СрезПоследних.Применяемость,
| СтруктураПриборов1СрезПоследних.ДСЕВходящий.Ссылка,
| СтруктураПриборов1СрезПоследних.ДСЕВходящий.ВидПредмета КАК ВидПредмета,
| СтруктураПриборов1СрезПоследних.ДСЕВходящий.ВидПредмета.Порядок КАК ДСЕВходящийВидПредметаПорядок,
| СтруктураПриборов1СрезПоследних.ДСЕВходящий.Код КАК Код,
| СтруктураПриборов1СрезПоследних.Заимствованные,
| СтруктураПриборов1СрезПоследних.Период,
| СтруктураПриборов1СрезПоследних.ДатаОкончанияИспользования,
| СтруктураПриборов1СрезПоследних.ВводНового,
| СтруктураПриборов1СрезПоследних.ИзменениеСоставаИзделия
|ИЗ
| РегистрСведений.СтруктураПриборов1.СрезПоследних(
| &НаДату,
| НомерЗаписиРСДСЕГл = &КодДСЕГл
| И (ДатаОкончанияИспользования = &ПустаяДата
| ИЛИ ДатаОкончанияИспользования > &НаДату)
| И ДопустимаяЗамена = &ДопустимаяЗамена) КАК СтруктураПриборов1СрезПоследних
|
|УПОРЯДОЧИТЬ ПО
| ДСЕВходящийВидПредметаПорядок,
| Код";
Запрос.УстановитьПараметр("НаДату", НаДату);
Запрос.УстановитьПараметр("КодДСЕГл", КодДСЕГл);
Запрос.УстановитьПараметр("ПустаяДата", '00010101');
Запрос.УстановитьПараметр("ДопустимаяЗамена", ДопустимаяЗамена);
Возврат(Запрос.Выполнить());
КонецФункции
Прелесть! Выполняется около минуты. При чем этот код дублируется почти во всех отчетах.
После оптимизации объем кода сократился в 3 раза, а время выполнения составило 1-2 сек.