Как в запросе собрать последовательность дней пересекающихся периодов #274628


#0 by diver78
Добрый день. Есть следующие условия: РегистрСведений (непериодический) "КартаЗанятости"  Структура регистра:      Измерения:          - НачалоРаботы (учитывается как Дата)          - ОкончаниеРаботы (учитывается как Дата). По мере необходимости заносится информация о том, что данный работник работал в указанном цехе некий период (вносится информация о дате начала работы в цехе и дата окончания работы в этом же цехе). Допустим отчет собирается за январь. В январе в Цехе №1 работали следующие работники: - Иванов И.И.  с 27.12.06 по 07.01.07, и с 12.01.07 по 13.01.07 - Петров П.П.  с 06.01.07 по 10.01.07 - Сидоров С.С. с 12.01.07 по 14.01.07 Требуется чтобы отчет выводил наименование цеха и перечень дат, в которые хоть один из работников работал работал в этом цехе. По представленным данным получается что в январе цех отработал = 13 дней. Перечень дат по результатам января: 01, 02, 03, 04, 05, 06, 07, 08, 09,10, 12, 13, 14. Как выбрать запросом цеха, работников и периоды работы - это понятно, но как сделать запрос, который выдаст только перечень цехов и ПЕРЕЧНЬ ДНЕЙ в которые они работали - не понятно. Требуется помощь. Заранее спасибо.
#1 by Neco
У самого то какие мысли?
#2 by diver78
Пока что мыслей нет. Сейчас попробую переложить это на SQL может станет яснее. Но не совсем понятно как крутить в запросах 1С8 даты.
#3 by Neco
Вообщем вся загвоздка в том чтобы в запросе взять таблицу дат за определенный месяц. Есть несколько способов: 1. Создать регистр сведений в него занести календарь за нужный промежуток времени.  В запросе делать соединение с эти регистром и получать нужный список дат 2. Построить "хитрый" запрос: 3. В 8.1 нужный список дат можно сформировать в ТЗ и выгрузить во временную таблицу
#4 by diver78
Спасибо за подсказку. Сейчас я все-таки добью на СКЛ примерчик, может в голове проснится (пока что даже нет четкого видения алгоритма решения без доптаблиц). 1.Завести календарь и из него получать перечень дней - хорошее решение. Но я его оставлю на случай невозможности другого решения. 2.Построить "хитрый" запрос - на мой взгляд, некрасивое решение. 3.У меня нет 8.1 :)
#5 by Neco
> У меня нет 8.1 Если есть лицензионная 8.0, то достать 8.1 не составит труда
#6 by diver78
По 8.1 все и так ясно, просто на это надо время. По поводу решения: на СКЛ написал запрос, который все пересекающиеся периоды объединяет в один период, т.е. на данном примере получается два сплошных периода "с 01.01.2007 по 10.01.2007" и "с 12.01.2007 по 14.01.2007". В 1С потом перебрать эти периоды по дням не составит труда, тем паче что группировка идет сперва по цехам, а потом по периодам. Теперь только надо поломать голову как правильно прописать вложенные запросы в 1С, потому что в разделе после слова "Выбрать " она не хочет понимать вложенный запрос.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С