//**************************** // ausevich.ru //**************************** // Получаем таблицу условий ВЫБРАТЬ УсловияАренды.Период КАК Период, УсловияАренды.Регистратор, УсловияАренды.Контрагент КАК Контрагент, УсловияАренды.ДоговорКонтрагента КАК ДоговорКонтрагента, УсловияАренды.Номенклатура КАК Номенклатура, УсловияАренды.ПериодНачало КАК ПериодНачало, УсловияАренды.ПериодКонец КАК ПериодКонец, УсловияАренды.Ставка ПОМЕСТИТЬ ВТ_УсловияАренды ИЗ РегистрСведений.УсловияАренды КАК УсловияАренды ГДЕ УсловияАренды.Активность = ИСТИНА ИНДЕКСИРОВАТЬ ПО Период, Контрагент, ДоговорКонтрагента, Номенклатура, ПериодНачало, ПериодКонец ; //////////////////////////////////////////////////////////////////////////////// // Получаем дата начала периодов ВЫБРАТЬ ВТ_УсловияАренды.Контрагент КАК Контрагент, ВТ_УсловияАренды.ДоговорКонтрагента КАК ДоговорКонтрагента, ВТ_УсловияАренды.Номенклатура КАК Номенклатура, ВТ_УсловияАренды.ПериодНачало КАК Период ПОМЕСТИТЬ ВТ_ПериодыНачала ИЗ ВТ_УсловияАренды КАК ВТ_УсловияАренды ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ВТ_УсловияАренды.Контрагент, ВТ_УсловияАренды.ДоговорКонтрагента, ВТ_УсловияАренды.Номенклатура, ДОБАВИТЬКДАТЕ(ВТ_УсловияАренды.ПериодКонец, ДЕНЬ, 1) ИЗ ВТ_УсловияАренды КАК ВТ_УсловияАренды ИНДЕКСИРОВАТЬ ПО Контрагент, ДоговорКонтрагента, Номенклатура, Период ; //////////////////////////////////////////////////////////////////////////////// // Получаем даты конца периодов ВЫБРАТЬ ВТ_УсловияАренды.Контрагент КАК Контрагент, ВТ_УсловияАренды.ДоговорКонтрагента КАК ДоговорКонтрагента, ВТ_УсловияАренды.Номенклатура КАК Номенклатура, ВТ_УсловияАренды.ПериодКонец КАК Период ПОМЕСТИТЬ ВТ_ПериодыКонцов ИЗ ВТ_УсловияАренды КАК ВТ_УсловияАренды ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ВТ_УсловияАренды.Контрагент, ВТ_УсловияАренды.ДоговорКонтрагента, ВТ_УсловияАренды.Номенклатура, ДОБАВИТЬКДАТЕ(ВТ_УсловияАренды.ПериодНачало, ДЕНЬ, -1) ИЗ ВТ_УсловияАренды КАК ВТ_УсловияАренды ИНДЕКСИРОВАТЬ ПО Контрагент, ДоговорКонтрагента, Номенклатура, Период ; //////////////////////////////////////////////////////////////////////////////// // Получаем "скелет" - таблицу периодов ВЫБРАТЬ ВТ_ПериодыНачала.Контрагент, ВТ_ПериодыНачала.ДоговорКонтрагента, ВТ_ПериодыНачала.Номенклатура, ВТ_ПериодыНачала.Период КАК ПериодНачало, МИНИМУМ(ВТ_ПериодыКонцов.Период) КАК ПериодКонец ПОМЕСТИТЬ ВТ_ТаблицаПериодов ИЗ ВТ_ПериодыНачала КАК ВТ_ПериодыНачала ПОЛНОЕ СОЕДИНЕНИЕ ВТ_ПериодыКонцов КАК ВТ_ПериодыКонцов ПО ВТ_ПериодыНачала.Контрагент = ВТ_ПериодыКонцов.Контрагент И ВТ_ПериодыНачала.ДоговорКонтрагента = ВТ_ПериодыКонцов.ДоговорКонтрагента И ВТ_ПериодыНачала.Номенклатура = ВТ_ПериодыКонцов.Номенклатура И ВТ_ПериодыНачала.Период <= ВТ_ПериодыКонцов.Период ГДЕ НЕ ВТ_ПериодыКонцов.Период ЕСТЬ NULL И НЕ ВТ_ПериодыНачала.Период ЕСТЬ NULL СГРУППИРОВАТЬ ПО ВТ_ПериодыНачала.Номенклатура, ВТ_ПериодыНачала.Контрагент, ВТ_ПериодыНачала.ДоговорКонтрагента, ВТ_ПериодыНачала.Период ; //////////////////////////////////////////////////////////////////////////////// // Получаем таблицу периодов с максимальным периодом регистрации ВЫБРАТЬ ВТ_ТаблицаПериодов.Контрагент КАК Контрагент, ВТ_ТаблицаПериодов.ДоговорКонтрагента КАК ДоговорКонтрагента, ВТ_ТаблицаПериодов.Номенклатура КАК Номенклатура, ВТ_ТаблицаПериодов.ПериодНачало КАК ПериодНачало, ВТ_ТаблицаПериодов.ПериодКонец КАК ПериодКонец, МАКСИМУМ(ВТ_УсловияАренды.Период) КАК Период ПОМЕСТИТЬ ВТ_ТаблицаПериодовСПериодомРегистрации ИЗ ВТ_ТаблицаПериодов КАК ВТ_ТаблицаПериодов ЛЕВОЕ СОЕДИНЕНИЕ ВТ_УсловияАренды КАК ВТ_УсловияАренды ПО ВТ_ТаблицаПериодов.Контрагент = ВТ_УсловияАренды.Контрагент И ВТ_ТаблицаПериодов.ДоговорКонтрагента = ВТ_УсловияАренды.ДоговорКонтрагента И ВТ_ТаблицаПериодов.Номенклатура = ВТ_УсловияАренды.Номенклатура И ВТ_ТаблицаПериодов.ПериодНачало >= ВТ_УсловияАренды.ПериодНачало И ВТ_ТаблицаПериодов.ПериодКонец <= ВТ_УсловияАренды.ПериодКонец СГРУППИРОВАТЬ ПО ВТ_ТаблицаПериодов.Контрагент, ВТ_ТаблицаПериодов.ДоговорКонтрагента, ВТ_ТаблицаПериодов.Номенклатура, ВТ_ТаблицаПериодов.ПериодНачало, ВТ_ТаблицаПериодов.ПериодКонец ИНДЕКСИРОВАТЬ ПО ПериодКонец, Контрагент, ДоговорКонтрагента, Номенклатура, ПериодНачало, Период ; //////////////////////////////////////////////////////////////////////////////// // Получаем окончательную таблицу ВЫБРАТЬ ВТ_ТаблицаПериодовСПериодомРегистрации.Контрагент, ВТ_ТаблицаПериодовСПериодомРегистрации.ДоговорКонтрагента, ВТ_ТаблицаПериодовСПериодомРегистрации.Номенклатура, ВТ_ТаблицаПериодовСПериодомРегистрации.ПериодНачало, ВТ_ТаблицаПериодовСПериодомРегистрации.ПериодКонец, ВТ_ТаблицаПериодовСПериодомРегистрации.Период, ВТ_УсловияАренды.Регистратор, ВТ_УсловияАренды.Ставка ИЗ ВТ_ТаблицаПериодовСПериодомРегистрации КАК ВТ_ТаблицаПериодовСПериодомРегистрации ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_УсловияАренды КАК ВТ_УсловияАренды ПО ВТ_ТаблицаПериодовСПериодомРегистрации.Контрагент = ВТ_УсловияАренды.Контрагент И ВТ_ТаблицаПериодовСПериодомРегистрации.ДоговорКонтрагента = ВТ_УсловияАренды.ДоговорКонтрагента И ВТ_ТаблицаПериодовСПериодомРегистрации.Номенклатура = ВТ_УсловияАренды.Номенклатура И ВТ_ТаблицаПериодовСПериодомРегистрации.Период = ВТ_УсловияАренды.Период И ВТ_ТаблицаПериодовСПериодомРегистрации.ПериодНачало >= ВТ_УсловияАренды.ПериодНачало И ВТ_ТаблицаПериодовСПериодомРегистрации.ПериодКонец <= ВТ_УсловияАренды.ПериодКонец