К основному контенту

Запросы. Объеденяем периоды действия

Прошлая задача с периодами обрела новую форму (и да, задача по прежнему упрощена - периоды в днях)

Нужно таблицу вида

Дата Начала  Дата Окончания
01.01.2015    11.01.2015
17.01.2015    18.01.2015
19.01.2015    20.01.2015
21.01.2015    22.01.2015

28.01.2015    28.01.2015

привести к таблице вида

Дата Начала Дата Окончания
01.01.2015    11.01.2015
17.01.2015    22.01.2015
28.01.2015    28.01.2015

Пришел к следующему решению, используя ранее накопленные знания

- Период по дням
- Собираем периоды действия

PROFIT!

ВЫБРАТЬ
 ДАТАВРЕМЯ(2015, 1, 1, 0, 0, 0) КАК ДатаНачала,
 ДАТАВРЕМЯ(2015, 1, 11, 0, 0, 0) КАК ДатаОкончания
ПОМЕСТИТЬ втПериоды

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 ДАТАВРЕМЯ(2015, 1, 17, 0, 0, 0),
 ДАТАВРЕМЯ(2015, 1, 18, 0, 0, 0)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 ДАТАВРЕМЯ(2015, 1, 19, 0, 0, 0),
 ДАТАВРЕМЯ(2015, 1, 20, 0, 0, 0)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 ДАТАВРЕМЯ(2015, 1, 21, 0, 0, 0),
 ДАТАВРЕМЯ(2015, 1, 22, 0, 0, 0)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 ДАТАВРЕМЯ(2015, 1, 28, 0, 0, 0),
 ДАТАВРЕМЯ(2015, 1, 28, 0, 0, 0)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 0 КАК Поле1
ПОМЕСТИТЬ втЧисла

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 7

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 втЧисла1.Поле1 + втЧисла10.Поле1 * 10 + втЧисла100.Поле1 * 100 + втЧисла1000.Поле1 * 1000 КАК Поле1
ПОМЕСТИТЬ втЛинейка
ИЗ
 втЧисла КАК втЧисла1,
 втЧисла КАК втЧисла10,
 втЧисла КАК втЧисла100,
 втЧисла КАК втЧисла1000
ГДЕ
 втЧисла1.Поле1 + втЧисла10.Поле1 * 10 + втЧисла100.Поле1 * 100 + втЧисла1000.Поле1 * 1000 <= РАЗНОСТЬДАТ(&Дата1, &Дата2, ДЕНЬ)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 ДОБАВИТЬКДАТЕ(&Дата1, ДЕНЬ, втЛинейка.Поле1) КАК Дата
ПОМЕСТИТЬ втВсеДаты
ИЗ
 втЛинейка КАК втЛинейка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 втВсеДаты.Дата
ПОМЕСТИТЬ втДаты
ИЗ
 втПериоды КАК втПериоды
  ВНУТРЕННЕЕ СОЕДИНЕНИЕ втВсеДаты КАК втВсеДаты
  ПО (втВсеДаты.Дата МЕЖДУ втПериоды.ДатаНачала И втПериоды.ДатаОкончания)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 втДаты.Дата КАК ДатаНачала,
 ЕСТЬNULL(втДатыСправа.Дата, втДаты.Дата) КАК ДатаОкончания
ПОМЕСТИТЬ втВариации
ИЗ
 втДаты КАК втДаты
  ЛЕВОЕ СОЕДИНЕНИЕ втДаты КАК втДатыСправа
  ПО втДаты.Дата < втДатыСправа.Дата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 МИНИМУМ(НеСгруппированныеПериодыСправа.ДатаНачала) КАК ДатаНачала,
 НеСгруппированныеПериодыСправа.ДатаОкончания
ИЗ
 (ВЫБРАТЬ
  НеСгруппированныеПериодыСправа.ДатаНачала КАК ДатаНачала,
  МАКСИМУМ(НеСгруппированныеПериодыСправа.ДатаОкончания) КАК ДатаОкончания
 ИЗ
  (ВЫБРАТЬ
   втВариации.ДатаНачала КАК ДатаНачала,
   втВариации.ДатаОкончания КАК ДатаОкончания
  ИЗ
   втВариации КАК втВариации
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ втДаты КАК втДаты
    ПО втВариации.ДатаНачала <= втДаты.Дата
     И втВариации.ДатаОкончания >= втДаты.Дата
  
  СГРУППИРОВАТЬ ПО
   втВариации.ДатаНачала,
   втВариации.ДатаОкончания
  
  ИМЕЮЩИЕ
   КОЛИЧЕСТВО(НАЧАЛОПЕРИОДА(втДаты.Дата, ДЕНЬ)) - 1 = РАЗНОСТЬДАТ(втВариации.ДатаНачала, втВариации.ДатаОкончания, ДЕНЬ)) КАК НеСгруппированныеПериодыСправа
 
 СГРУППИРОВАТЬ ПО
  НеСгруппированныеПериодыСправа.ДатаНачала) КАК НеСгруппированныеПериодыСправа

СГРУППИРОВАТЬ ПО
 НеСгруппированныеПериодыСправа.ДатаОкончания



Комментарии

Популярные сообщения из этого блога

СписокВыбора. Показать Представление вместо Значения

Вводная Если на форме есть элемент управления со списком выбора, в моем конкретном примере это Колонка Значение (Число (3,0)) с настроенным списком выбора. По умолчанию платформа отображает именно строковое значения, а не текст представления  из списка выбора (когда как при выборе значения из списка показываются именно представления). Решение Для Управляемых форм необходимо настроить правила условного оформления, для обычных форм - оформление ячеек при выводе данных.

Табличный Документ. Разная ширина колонки в строках

Когда нужно в макете (табличном документе) изменить ширину колонки  для конкретных строк: 1. Выделить всю строку (строки). Именно всю, фокус для выделенной области не работает. 2. Нажимаем и не отпускает Ctrl 3. С помощью мыши изменяют ширину любой из колонок - будет задан вопрос об создании нового формата строк - соглашаемся. Как же прекрасен мир, где для модификаций не достаточно просто использовать контекстное меню и диалог редактора свойств, где нужно знать заветные слова и таинства танца. 90ые, моё почтение. UPD Программно, тоже самое, можно сделать через ТабДок = Новый ТабличныйДокумент(); ТабДок.Область(1,,1,).СоздатьФорматСтрок(); ТабДок.Область(1,1).ШиринаКолонок = 70; ТабДок.Область(1,2).ШиринаКолонок = 30; ТабДок.Область(2,,2,).СоздатьФорматСтрок(); ТабДок.Область(2,1).ШиринаКолонок = 30; ТабДок.Область(2,2).ШиринаКолонок = 70; ТабДок.Показать();

Расширение конфигурации + Связанные документы (Режим совместимости 8.3.12)

Вводная: реализовать ввод Заказа поставщику на основании Заказа на Ремонт. решить через расширения конфигурации. Хочу обратить ваше внимание, не нужно добавлять в расширение критерий отбора, для 8.3.12 нам не доступно добавление\изменение состава критерия. Более того может зависать конфигуратор (столкнулся с последней версией 8.3.14 + ERP) Разработку рекомендую вести с применением хранилища и для расширения. Иначе устанете потом выгребать чего лишнего включили в расширение при добавлении таких или схожих обектов с составными типами и подобное. Все текущие типовые решения сейчас идут в режиме совместимости 8.3.12, в прочем и для 8.3.14 (и даже 8.3.15 ничего не поменялось). Что нам нужно было бы сделать при отказе от поддержки: 1) добавить наш документ в Критерий отбора (состав, реквизиты); 2) в раздел Ввод на основании целевого документа. И что с целью сохранения поддержки. Как сделать это же для расширения: 1) Добавить реквизит расширения Документы.ЗаказПоставщику._За