Очень долго открывается список документов

1. 3762515 24.06.14 16:04 Сейчас в теме
В УПП 1.51, есть самописный документ "Извещение" и список этих документов открывается ну ооочень долго, если установить интервал дат для просмотра последние семь дней, то открывается около 10-15 секунд(что тоже довольно долго в сравнении с другими). Самих документов не много 15-25 в сутки. Долгое открытие и в толстом и в тонком клиенте. Как это исправить, в какую сторону копать?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1493 24.06.14 16:06 Сейчас в теме
(1) 3762515, конфигуратор - ваш документ и там код смотри, явна какая-то рекурсия или очень сложный запрос...
6. Allexe8.1 24.06.14 16:22 Сейчас в теме
(1) 3762515, форма списка управляемая? Если да, у Динамического списка - стоит галка "ПроизвольныйЗапрос" ?
7. 3762515 24.06.14 16:28 Сейчас в теме
(6) Allexe8.1, да у управляемой формы стоит эта галка.
3. StormCrow 24.06.14 16:08 Сейчас в теме
Убрать все из "ПриВыводеСтроки()" и проверить.
4. Tiger86 24.06.14 16:09 Сейчас в теме
как вариант какие то вычисляемые поля на форму списка вытаскиваются

самое опасное - процедура ПриВыводеСтроки() - из-за нее как правило много чего подвисает при открытии формы
5. 3762515 24.06.14 16:16 Сейчас в теме
В обычной форме списка совсем нет кода. В Форме списка управляемой всего три маленьких процедуры:
&НаКлиенте
Процедура СтруктураПодчиненности(Команда)
	ОбщегоНазначения_Клиент.СтруктураПодчиненности(Элементы.Список.ТекущаяСтрока);
КонецПроцедуры

&НаКлиенте
Процедура Печать(Команда)
	ОбщегоНазначения_Клиент.Печать(Элементы.Список.ТекущаяСтрока,Команда.Имя);
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ОбщегоНазначения_Клиент.УстановитьКнопкиПечатиВФормеСписка("Извещение",ЭтаФорма);   	
КонецПроцедуры
Показать


Процедуры "ПриВыводеСтроки()" нету
8. oslokot 192 24.06.14 16:29 Сейчас в теме
(0) В документе небось есть реквизит "Хранилище" и в поле в списке?
9. 3762515 24.06.14 16:38 Сейчас в теме
(8) oslokot, не совсем понял, что за реквизит "Хранилище"(думаю это реквизит с типом "Хранилище"), - нет, таких там нету. Только справочники, даты, числа и т. п.
10. Agapov_Stas 1 24.06.14 16:48 Сейчас в теме
(9) 3762515,
Скорее всего причина кроется в "произвольном запросе". Возможно запрос выполняется очень долго. Вот система и ждет результат запроса прежде чем сформировать форму списка. Может покажете этот запрос ?
11. oslokot 192 24.06.14 16:49 Сейчас в теме
(9) ясно, а открывается обычная форма списка или управляемая?
12. 3762515 24.06.14 16:53 Сейчас в теме
(11) oslokot, в тонком клиенте управляемая, в толстом обычная. Обе долгие.
13. Agapov_Stas 1 24.06.14 16:54 Сейчас в теме
(12) 3762515,
В обычной форме есть процедура ПриВыводеСтроки() ?
14. 3762515 24.06.14 16:57 Сейчас в теме
(13) Agapov_Stas, нету.
Есть только в форме самого документа, при выводе строки ТЧ документа:
Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	Если ЗначениеЗаполнено(ДанныеСтроки.СерияНоменклатуры.БФК_ВесНетто) Тогда
		ОформлениеСтроки.Ячейки.КоличествоРулонов.УстановитьТекст(Строка(ДанныеСтроки.Количество / ДанныеСтроки.СерияНоменклатуры.БФК_ВесНетто));
	КонецЕсли;
КонецПроцедуры
15. Agapov_Stas 1 24.06.14 16:58 Сейчас в теме
(14) 3762515,
А произвольный запрос все таки можно в студию ?
Есть еще такая процедура в обычной форме ПриПолученииДанных() - такой тоже нет ?
16. 3762515 24.06.14 17:05 Сейчас в теме
(15) Agapov_Stas,
Произвольный запрос:
ВЫБРАТЬ
	ДокументИзвещение.Ссылка,
	МАКСИМУМ(ДокументИзвещение.ВерсияДанных) КАК ВерсияДанных,
	МАКСИМУМ(ДокументИзвещение.ПометкаУдаления) КАК ПометкаУдаления,
	МАКСИМУМ(ДокументИзвещение.Номер) КАК Номер,
	МАКСИМУМ(ДокументИзвещение.Дата) КАК Дата,
	МАКСИМУМ(ДокументИзвещение.Проведен) КАК Проведен,
	МАКСИМУМ(ДокументИзвещение.ВариантИспользования) КАК ВариантИспользования,
	МАКСИМУМ(ДокументИзвещение.БДМ) КАК БДМ,
	МАКСИМУМ(ДокументИзвещение.Организация) КАК Организация,
	МАКСИМУМ(ДокументИзвещение.Ответственный) КАК Ответственный,
	МАКСИМУМ(ДокументИзвещение.Подразделение) КАК Подразделение,
	МАКСИМУМ(ДокументИзвещение.ВесИтого) КАК ВесИтого,
	МАКСИМУМ(ДокументИзвещение.Смена) КАК Смена,
	МАКСИМУМ(ДокументИзвещение.Склад) КАК Склад,
	МАКСИМУМ(ДокументИзвещение.ПредставлениеРулонов) КАК ПредставлениеРулонов,
	МАКСИМУМ(ДокументИзвещение.ПодразделениеОрганизации) КАК ПодразделениеОрганизации,
	МАКСИМУМ(ДокументИзвещение.Номенклатура) КАК Номенклатура,
	МАКСИМУМ(ЕСТЬNULL(ИностранныеНаименования.ИностранноеНаименование, ДокументИзвещение.Номенклатура.Наименование)) КАК Наименование,
	МАКСИМУМ(ДокументИзвещение.СкладПолучатель) КАК СкладПолучатель,
	МАКСИМУМ(ПеремещениеТоваров.Ссылка) КАК Перемещение,
	МАКСИМУМ(РасходныйОрдерНаТовары.Ссылка) КАК РасходныйОрдер,
	МАКСИМУМ(ПриходныйОрдерНаТовары.Ссылка) КАК ПриходныйОрдер,
	МАКСИМУМ(ВыпускПродукции.Ссылка) КАК ВыпускПродукции
ИЗ
	Документ.Извещение КАК ДокументИзвещение
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИностранныеНаименования КАК ИностранныеНаименования
		ПО ДокументИзвещение.Номенклатура = ИностранныеНаименования.Объект
			И (ДокументИзвещение.ВариантИспользования = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользования.Экспорт))
			И (ИностранныеНаименования.Язык.Код = "014")
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
		ПО ДокументИзвещение.Ссылка = ПеремещениеТоваров.ДокументОснование
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВыпускПродукции КАК ВыпускПродукции
		ПО ДокументИзвещение.Ссылка = ВыпускПродукции.ДокументОснование
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйОрдерНаТовары КАК ПриходныйОрдерНаТовары
		ПО ДокументИзвещение.Ссылка = ПриходныйОрдерНаТовары.ДокументПеремещения.ДокументОснование
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
		ПО ДокументИзвещение.Ссылка = РасходныйОрдерНаТовары.ДокументПередачи.ДокументОснование

СГРУППИРОВАТЬ ПО
	ДокументИзвещение.Ссылка
Показать

В обычной форме списка совсем ничего.
17. Agapov_Stas 1 24.06.14 17:14 Сейчас в теме
(16) 3762515,
Попробуйте так (чтоб проверить скорость открытия)

ВЫБРАТЬ
    ДокументИзвещение.Ссылка,
    МАКСИМУМ(ДокументИзвещение.ВерсияДанных) КАК ВерсияДанных,
    МАКСИМУМ(ДокументИзвещение.ПометкаУдаления) КАК ПометкаУдаления,
    МАКСИМУМ(ДокументИзвещение.Номер) КАК Номер,
    МАКСИМУМ(ДокументИзвещение.Дата) КАК Дата,
    МАКСИМУМ(ДокументИзвещение.Проведен) КАК Проведен,
    МАКСИМУМ(ДокументИзвещение.ВариантИспользования) КАК ВариантИспользования,
    МАКСИМУМ(ДокументИзвещение.БДМ) КАК БДМ,
    МАКСИМУМ(ДокументИзвещение.Организация) КАК Организация,
    МАКСИМУМ(ДокументИзвещение.Ответственный) КАК Ответственный,
    МАКСИМУМ(ДокументИзвещение.Подразделение) КАК Подразделение,
    МАКСИМУМ(ДокументИзвещение.ВесИтого) КАК ВесИтого,
    МАКСИМУМ(ДокументИзвещение.Смена) КАК Смена,
    МАКСИМУМ(ДокументИзвещение.Склад) КАК Склад,
    МАКСИМУМ(ДокументИзвещение.ПредставлениеРулонов) КАК ПредставлениеРулонов,
    МАКСИМУМ(ДокументИзвещение.ПодразделениеОрганизации) КАК ПодразделениеОрганизации,
    МАКСИМУМ(ДокументИзвещение.Номенклатура) КАК Номенклатура
   
ИЗ
    Документ.Извещение КАК ДокументИзвещение
        

СГРУППИРОВАТЬ ПО
    ДокументИзвещение.Ссылка
Показать


Убрал левые соединения - возможно поля связки не индексируются (это может влиять на время формирования запроса)
18. nickpugachev 24.06.14 17:44 Сейчас в теме
(17) Agapov_Stas, а нафига там группировка?
(16) 3762515, запрос однозначно переписывать. у вас двойные левые соединения (разыменование через 2 точки), которые приводят к очень тяжелым соединениям. да еще и типы документов оснований, наверное, составные
Allexe8.1; +1 Ответить
21. 3762515 25.06.14 08:28 Сейчас в теме
(17) Agapov_Stas, попробовал укороченный запрос(без левых соединений), всё отработало быстро, быстрее некуда. Буду выяснять кто и зачем такое нагородил. Всем большое спасибо.
20. Allexe8.1 25.06.14 00:50 Сейчас в теме
(16) 3762515, поддерживаю (18)
Вам нужно, в идеале - узнать, для чего, для какой цели все это было накручено. И переписать)
К слову, недавно была схожая проблема - список документов в обработке, с произвольными колонками (обычная форма - данные получались в событии ПриПолученииДаннных()). Проблема была в том, что по этим произвольным колонкам нужно было делать отбор. А это означало - отбор по списку ссылок, список ссылок получается из запроса, и в нем может быть несколько тысяч элементов. Для 1с - это заведомая полужизнь(после определенного предела (ограничение длины текста запроса) - запрос к серверу строится не списком параметров, а через временную таблицу, и каждое помещение значение в эту ВТ - это отдельный запрос) Решил, добавив регистр сведений (заполняется через обработчики событий документа), на форме - список регистра эмулирует список документов. Все летает)
19. Allexe8.1 25.06.14 00:35 Сейчас в теме
22. Spicy 01.03.19 16:42 Сейчас в теме
Всем доброго времени суток!
Подскажите пожалуйста как мне лучше оптимизировать вложенный запрос?

Заранее спасибо!

ВЫБРАТЬ
	СправочникуатТС.Ссылка КАК Ссылка,
	СправочникуатТС.ВерсияДанных КАК ВерсияДанных,
	СправочникуатТС.ПометкаУдаления КАК ПометкаУдаления,
	СправочникуатТС.Предопределенный КАК Предопределенный,
	СправочникуатТС.Родитель КАК Родитель,
	СправочникуатТС.ЭтоГруппа КАК ЭтоГруппа,
	СправочникуатТС.Наименование КАК Наименование,
	СправочникуатТС.VIN КАК VIN,
	СправочникуатТС.АвтоматическиСписыватьРасходТопливаНаЗапуск КАК АвтоматическиСписыватьРасходТопливаНаЗапуск,
	СправочникуатТС.БалансоваяСтоимость КАК БалансоваяСтоимость,
	СправочникуатТС.ВидМоделиТС КАК ВидМоделиТС,
	СправочникуатТС.ВладелецТС КАК ВладелецТС,
	СправочникуатТС.ГабаритныйРазмерВысота КАК ГабаритныйРазмерВысота,
	СправочникуатТС.ГабаритныйРазмерДлина КАК ГабаритныйРазмерДлина,
	СправочникуатТС.ГабаритныйРазмерШирина КАК ГабаритныйРазмерШирина,
	СправочникуатТС.Гараж КАК Гараж,
	СправочникуатТС.ГаражныйНомер КАК ГаражныйНомер,
	СправочникуатТС.ГодВыпуска КАК ГодВыпуска,
	СправочникуатТС.ГосударственныйНомер КАК ГосударственныйНомер,
	СправочникуатТС.ДатаВводаВЭксплуатацию КАК ДатаВводаВЭксплуатацию,
	СправочникуатТС.ДатаВыбытия КАК ДатаВыбытия,
	СправочникуатТС.КодПоКлассификатору КАК КодПоКлассификатору,
	СправочникуатТС.Колонна КАК Колонна,
	СправочникуатТС.Комментарий КАК Комментарий,
	СправочникуатТС.ЛицензионнаяКарточка КАК ЛицензионнаяКарточка,
	СправочникуатТС.Модель КАК Модель,
	СправочникуатТС.МодельДвигателя КАК МодельДвигателя,
	СправочникуатТС.МощностьДвигателяКВт КАК МощностьДвигателяКВт,
	СправочникуатТС.МощностьДвигателяЛС КАК МощностьДвигателяЛС,
	СправочникуатТС.НачальнаяНаработка КАК НачальнаяНаработка,
	СправочникуатТС.НачальныйПробег КАК НачальныйПробег,
	СправочникуатТС.НомерДвигателя КАК НомерДвигателя,
	СправочникуатТС.НомерКПП КАК НомерКПП,
	СправочникуатТС.НомерКузова КАК НомерКузова,
	СправочникуатТС.НомерЛицензионнойКарточки КАК НомерЛицензионнойКарточки,
	СправочникуатТС.НомерСерииЛицензионнойКарточки КАК НомерСерииЛицензионнойКарточки,
	СправочникуатТС.НомерШасси КАК НомерШасси,
	СправочникуатТС.Организация КАК Организация,
	СправочникуатТС.ОсновноеСредство КАК ОсновноеСредство,
	СправочникуатТС.ОсновноеУсловиеРаботы КАК ОсновноеУсловиеРаботы,
	СправочникуатТС.ОсновнойВидПЛ КАК ОсновнойВидПЛ,
	СправочникуатТС.ОсновнойВидПеревозки КАК ОсновнойВидПеревозки,
	СправочникуатТС.ОсновнойРежимРаботы КАК ОсновнойРежимРаботы,
	СправочникуатТС.Подразделение КАК Подразделение,
	СправочникуатТС.ПолезныйРазмерВысота КАК ПолезныйРазмерВысота,
	СправочникуатТС.ПолезныйРазмерДлина КАК ПолезныйРазмерДлина,
	СправочникуатТС.ПолезныйРазмерШирина КАК ПолезныйРазмерШирина,
	СправочникуатТС.ПринадлежностьТС КАК ПринадлежностьТС,
	СправочникуатТС.СерияЛицензионнойКарточки КАК СерияЛицензионнойКарточки,
	СправочникуатТС.СобственныйВес КАК СобственныйВес,
	СправочникуатТС.СрокИспользования КАК СрокИспользования,
	СправочникуатТС.ТипТС КАК ТипТС,
	СправочникуатТС.ЦветКузова КАК ЦветКузова,
	ВЫБОР
		КОГДА ДанныеПоТО.Осталось <= 0
			ТОГДА 0
		ИНАЧЕ 1
	КОНЕЦ КАК ТО,
	ДанныеПоТО.Осталось КАК Осталось,
	ВложенныйЗапросДокументыТС.ЕстьПросроченныеДокументы КАК ПросроченныеДокументы,
	ВЫБОР
		КОГДА НаличиеФайлов.ЕстьФайлы ЕСТЬ NULL
			ТОГДА ЛОЖЬ
		ИНАЧЕ НаличиеФайлов.ЕстьФайлы
	КОНЕЦ КАК ПрисоединенныйФайл,
	СправочникуатТС.бит_вн_ТекущийПробег КАК ТекущийПробег,
	СправочникуатТС.бит_вн_ТекущийСпидометр КАК ТекущийСпидометр,
	СправочникуатТС.бит_вн_ТекущийБак КАК ТекущийБак,
	СправочникуатТС.бит_вн_ДатаПоследнегоПЛ КАК ДатаПоследнегоПЛ
ИЗ
	Справочник.уатТС КАК СправочникуатТС
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			НормыТО.ТС КАК ТС,
			МИНИМУМ(ВЫБОР
					КОГДА НормыТО.ЗначениеПараметраВыработки = 0
						ТОГДА РАЗНОСТЬДАТ(&ДатаОкончания, ВЫБОР
									КОГДА НормыТО.ПериодичностьОбслуживания = ЗНАЧЕНИЕ(Перечисление.Периодичность.Год)
										ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), ГОД, НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
									ИНАЧЕ ВЫБОР
											КОГДА НормыТО.ПериодичностьОбслуживания = ЗНАЧЕНИЕ(Перечисление.Периодичность.Полугодие)
												ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), МЕСЯЦ, 6 * НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
											ИНАЧЕ ВЫБОР
													КОГДА НормыТО.ПериодичностьОбслуживания = ЗНАЧЕНИЕ(Перечисление.Периодичность.Квартал)
														ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), КВАРТАЛ, НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
													ИНАЧЕ ВЫБОР
															КОГДА НормыТО.ПериодичностьОбслуживания = ЗНАЧЕНИЕ(Перечисление.Периодичность.Месяц)
																ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), МЕСЯЦ, НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
															ИНАЧЕ ВЫБОР
																	КОГДА НормыТО.ПериодичностьОбслуживания = ЗНАЧЕНИЕ(Перечисление.Периодичность.Декада)
																		ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), ДЕНЬ, 10 * НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
																	ИНАЧЕ ВЫБОР
																			КОГДА НормыТО.ПериодичностьОбслуживания = ЗНАЧЕНИЕ(Перечисление.Периодичность.Неделя)
																				ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), НЕДЕЛЯ, НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
																			ИНАЧЕ ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), ДЕНЬ, НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
																		КОНЕЦ
																КОНЕЦ
														КОНЕЦ
												КОНЕЦ
										КОНЕЦ
								КОНЕЦ, ДЕНЬ)
					ИНАЧЕ НормыТО.ЗначениеПараметраВыработки - (ВЫБОР
							КОГДА уатВыработкаОбороты.КоличествоОборот ЕСТЬ NULL
								ТОГДА 0
							ИНАЧЕ ВЫБОР
									КОГДА уатВыработкаОбороты.ПараметрВыработки.Временный
										ТОГДА уатВыработкаОбороты.КоличествоОборот / 3600
									ИНАЧЕ уатВыработкаОбороты.КоличествоОборот
								КОНЕЦ
						КОНЕЦ + ВЫБОР
							КОГДА НормыТО.ТС.Модель.НаличиеСпидометра
										И НормыТО.ПараметрВыработки = ЗНАЧЕНИЕ(Справочник.уатПараметрыВыработки.ПробегОбщий)
									ИЛИ НЕ НормыТО.ТС.Модель.НаличиеСпидометра
										И НормыТО.ПараметрВыработки = ЗНАЧЕНИЕ(Справочник.уатПараметрыВыработки.ВремяВРаботе)
								ТОГДА НормыТО.НачальныйПробег
							ИНАЧЕ 0
						КОНЕЦ - ВЫБОР
							КОГДА уатПрохождениеТОСрезПоследних.Выработка ЕСТЬ NULL
								ТОГДА 0
							ИНАЧЕ ВЫБОР
									КОГДА уатВыработкаОбороты.ПараметрВыработки.Временный
										ТОГДА уатПрохождениеТОСрезПоследних.Выработка / 3600
									ИНАЧЕ уатПрохождениеТОСрезПоследних.Выработка
								КОНЕЦ
						КОНЕЦ + НормыТО.Допуск)
				КОНЕЦ) КАК Осталось
		ИЗ
			(ВЫБРАТЬ
				уатМоделиТСНормативыОбслуживания.ВидОбслуживания КАК ВидОбслуживания,
				уатМоделиТСНормативыОбслуживания.ПараметрВыработки КАК ПараметрВыработки,
				ВЫБОР
					КОГДА уатМоделиТСНормативыОбслуживания.ЗначениеПараметраВыработки ЕСТЬ NULL
						ТОГДА 0
					ИНАЧЕ уатМоделиТСНормативыОбслуживания.ЗначениеПараметраВыработки
				КОНЕЦ КАК ЗначениеПараметраВыработки,
				уатМоделиТСНормативыОбслуживания.ПериодичностьОбслуживания КАК ПериодичностьОбслуживания,
				ВЫБОР
					КОГДА уатМоделиТСНормативыОбслуживания.КоличествоПериодов ЕСТЬ NULL
							ИЛИ уатМоделиТСНормативыОбслуживания.КоличествоПериодов = 0
						ТОГДА 1
					ИНАЧЕ уатМоделиТСНормативыОбслуживания.КоличествоПериодов
				КОНЕЦ КАК ПродолжительностьПериода,
				ВЫБОР
					КОГДА уатМоделиТСНормативыОбслуживания.КоличествоПериодов ЕСТЬ NULL
						ТОГДА 0
					ИНАЧЕ уатМоделиТСНормативыОбслуживания.КоличествоПериодов
				КОНЕЦ КАК КоличествоПериодов,
				ВЫБОР
					КОГДА уатМоделиТСНормативыОбслуживания.Допуск ЕСТЬ NULL
						ТОГДА 0
					ИНАЧЕ уатМоделиТСНормативыОбслуживания.Допуск
				КОНЕЦ КАК Допуск,
				уатТС.Ссылка КАК ТС,
				уатТС.НачальныйПробег КАК НачальныйПробег,
				уатТС.ДатаВводаВЭксплуатацию КАК ДатаВводаВЭксплуатацию
			ИЗ
				Справочник.уатМоделиТС.НормативыОбслуживания КАК уатМоделиТСНормативыОбслуживания
					ЛЕВОЕ СОЕДИНЕНИЕ Справочник.уатТС КАК уатТС
					ПО (уатТС.Модель = уатМоделиТСНормативыОбслуживания.Ссылка)) КАК НормыТО
				ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатПрохождениеТО.СрезПоследних(, ) КАК уатПрохождениеТОСрезПоследних
				ПО НормыТО.ВидОбслуживания = уатПрохождениеТОСрезПоследних.ВидТО
					И НормыТО.ТС = уатПрохождениеТОСрезПоследних.ТС
					И НормыТО.ПараметрВыработки = уатПрохождениеТОСрезПоследних.ПараметрВыработки
				ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.уатВыработкаТС.Обороты(, , , ) КАК уатВыработкаОбороты
				ПО НормыТО.ПараметрВыработки = уатВыработкаОбороты.ПараметрВыработки
					И НормыТО.ТС = уатВыработкаОбороты.ТС
		ГДЕ
			(НормыТО.ЗначениеПараметраВыработки <> 0
						И ВЫБОР
							КОГДА уатВыработкаОбороты.КоличествоОборот ЕСТЬ NULL
									И уатПрохождениеТОСрезПоследних.Выработка ЕСТЬ NULL
								ТОГДА 0
							ИНАЧЕ ВЫБОР
									КОГДА уатВыработкаОбороты.КоличествоОборот ЕСТЬ NULL
										ТОГДА -уатПрохождениеТОСрезПоследних.Выработка
									ИНАЧЕ ВЫБОР
											КОГДА уатПрохождениеТОСрезПоследних.Выработка ЕСТЬ NULL
												ТОГДА ВЫБОР
														КОГДА НормыТО.ПараметрВыработки.Временный
															ТОГДА уатВыработкаОбороты.КоличествоОборот / 3600
														ИНАЧЕ уатВыработкаОбороты.КоличествоОборот
													КОНЕЦ
											ИНАЧЕ ВЫБОР
													КОГДА НормыТО.ПараметрВыработки.Временный
														ТОГДА уатВыработкаОбороты.КоличествоОборот / 3600
													ИНАЧЕ уатВыработкаОбороты.КоличествоОборот
												КОНЕЦ - ВЫБОР
													КОГДА уатПрохождениеТОСрезПоследних.ПараметрВыработки.Временный
														ТОГДА уатПрохождениеТОСрезПоследних.Выработка / 3600
													ИНАЧЕ уатПрохождениеТОСрезПоследних.Выработка
												КОНЕЦ
										КОНЕЦ
								КОНЕЦ
						КОНЕЦ >= НормыТО.ЗначениеПараметраВыработки - НормыТО.Допуск - ВЫБОР
							КОГДА НормыТО.ТС.Модель.НаличиеСпидометра
										И НормыТО.ПараметрВыработки = ЗНАЧЕНИЕ(Справочник.уатПараметрыВыработки.ПробегОбщий)
									ИЛИ НЕ НормыТО.ТС.Модель.НаличиеСпидометра
										И НормыТО.ПараметрВыработки = ЗНАЧЕНИЕ(Справочник.уатПараметрыВыработки.ВремяВРаботе)
								ТОГДА НормыТО.НачальныйПробег
							ИНАЧЕ 0
						КОНЕЦ
					ИЛИ НормыТО.ЗначениеПараметраВыработки = 0
						И ВЫБОР
							КОГДА НормыТО.ПериодичностьОбслуживания = ЗНАЧЕНИЕ(Перечисление.Периодичность.Год)
								ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), ГОД, НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
							ИНАЧЕ ВЫБОР
									КОГДА НормыТО.ПериодичностьОбслуживания = ЗНАЧЕНИЕ(Перечисление.Периодичность.Полугодие)
										ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), МЕСЯЦ, 6 * НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
									ИНАЧЕ ВЫБОР
											КОГДА НормыТО.ПериодичностьОбслуживания = ЗНАЧЕНИЕ(Перечисление.Периодичность.Квартал)
												ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), КВАРТАЛ, НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
											ИНАЧЕ ВЫБОР
													КОГДА НормыТО.ПериодичностьОбслуживания = ЗНАЧЕНИЕ(Перечисление.Периодичность.Месяц)
														ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), МЕСЯЦ, НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
													ИНАЧЕ ВЫБОР
															КОГДА НормыТО.ПериодичностьОбслуживания = ЗНАЧЕНИЕ(Перечисление.Периодичность.Декада)
																ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), ДЕНЬ, 10 * НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
															ИНАЧЕ ВЫБОР
																	КОГДА НормыТО.ПериодичностьОбслуживания = ЗНАЧЕНИЕ(Перечисление.Периодичность.Неделя)
																		ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), НЕДЕЛЯ, НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
																	ИНАЧЕ ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(уатПрохождениеТОСрезПоследних.Период, НормыТО.ДатаВводаВЭксплуатацию), ДЕНЬ, НормыТО.ПродолжительностьПериода), ДЕНЬ, -1 * НормыТО.Допуск)
																КОНЕЦ
														КОНЕЦ
												КОНЕЦ
										КОНЕЦ
								КОНЕЦ
						КОНЕЦ < &ДатаОкончания)
		
		СГРУППИРОВАТЬ ПО
			НормыТО.ТС) КАК ДанныеПоТО
		ПО СправочникуатТС.Ссылка = ДанныеПоТО.ТС
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			уатТС.Ссылка КАК Ссылка,
			ВЫБОР
				КОГДА КОЛИЧЕСТВО(ВложенныйЗапрос.ТС) > 0
					ТОГДА 0
				ИНАЧЕ 1
			КОНЕЦ КАК ЕстьПросроченныеДокументы
		ИЗ
			Справочник.уатТС КАК уатТС
				ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
					уатДокументыТС.ТС КАК ТС
				ИЗ
					РегистрСведений.уатДокументыТС КАК уатДокументыТС
				ГДЕ
					ДОБАВИТЬКДАТЕ(уатДокументыТС.ДатаОкончания, ДЕНЬ, -1 * &ДниДоОкончанияДействияДокументовТС) <= &ДатаОкончания
					И уатДокументыТС.ДатаОкончания <> ДАТАВРЕМЯ(1, 1, 1)
					И НЕ уатДокументыТС.Архив
				
				ОБЪЕДИНИТЬ ВСЕ
				
				ВЫБРАТЬ
					уатПластиковыеКарты.КомуВыдана
				ИЗ
					Справочник.уатПластиковыеКарты КАК уатПластиковыеКарты
				ГДЕ
					уатПластиковыеКарты.Статус <> ЗНАЧЕНИЕ(Перечисление.уатСтатусыКарт.Аннулирована)
					И уатПластиковыеКарты.ДатаОкончания <> ДАТАВРЕМЯ(1, 1, 1)
					И ДОБАВИТЬКДАТЕ(уатПластиковыеКарты.ДатаОкончания, ДЕНЬ, -1 * &ДниДоОкончанияДействияТопливныхКарт) <= &ТекущаяДата) КАК ВложенныйЗапрос
				ПО уатТС.Ссылка = ВложенныйЗапрос.ТС
		
		СГРУППИРОВАТЬ ПО
			уатТС.Ссылка) КАК ВложенныйЗапросДокументыТС
		ПО СправочникуатТС.Ссылка = ВложенныйЗапросДокументыТС.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
		ПО СправочникуатТС.Ссылка = НаличиеФайлов.ОбъектСФайлами
Показать
Оставьте свое сообщение

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