1С запрос

1. eLeMeNtaLe 02.11.23 10:12 Сейчас в теме
Всем доброго времени суток!
Подскажите с построением запроса. Есть регистр сведений в который пишутся данные по проходу сотрудников через турникет организации в виде (Скрин 1). Необходимо построить запрос в котором строки входа и выхода объединятся (Скрин 2).
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
10. Sashares 34 02.11.23 11:14 Сейчас в теме
(1)Добавляете АвтоНомерЗаписи.
В одну временную таблицу отбираете Вход, в другую Выход.
Соединяете Вход с Выходом по Организация, Сотрудник, Автономер = Автономер + 1
Nadushka74; +1 Ответить
11. BeerWulf 02.11.23 11:16 Сейчас в теме
Во временную таблицу помещаешь первые 100000 строк отсортированных по сотруднику и дате. В неё же добавляешь поле Автонумерация(). Затем из временной таблицы выбираешь строки где событие = "вход" и левым соединением с этой же временной таблицей ищешь его "выход" по условию сотрудникВТ1 = сотрудникВТ2 и НомерЗаписиВТ = НомерЗаписиВТ2 - 1
В (10) чуть быстрее дан ответ. Только не нужно отбирать отдельно входы и выходы во временную таблицу.
12. eLeMeNtaLe 02.11.23 11:31 Сейчас в теме
(10)
(11)Сделал почти по той схеми что вы предложили. Создал две временных таблицы, в одной только входы, в другой только выходы. Объединил их все выходы по сотруднику к каждому входу, затем сгрупировал по полю организация, сотрудник, дата входа, а поле дата выхода взял минимальную.
ВЫБРАТЬ
	ВЫРАЗИТЬ(ТЗСписка.Фирма КАК СТРОКА(100)) КАК Организация,
	ВЫРАЗИТЬ(ТЗСписка.Сотрудник КАК СТРОКА(100)) КАК Сотрудник,
	ТЗСписка.TDATETIME КАК Дата,
	ВЫРАЗИТЬ(ТЗСписка.Направление КАК СТРОКА(10)) КАК Событие
ПОМЕСТИТЬ ВТ_ДаннеXML
ИЗ
	&ТЗСписка КАК ТЗСписка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ДаннеXML.Организация КАК Организация,
	ВТ_ДаннеXML.Сотрудник КАК Сотрудник,
	ВТ_ДаннеXML.Дата КАК ДатаВхода
ПОМЕСТИТЬ ВТ_Входы
ИЗ
	ВТ_ДаннеXML КАК ВТ_ДаннеXML
ГДЕ
	ВТ_ДаннеXML.Событие = "Вход"
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ДаннеXML.Организация КАК Организация,
	ВТ_ДаннеXML.Сотрудник КАК Сотрудник,
	ВТ_ДаннеXML.Дата КАК ДатаВыхода
ПОМЕСТИТЬ ВТ_Выходы
ИЗ
	ВТ_ДаннеXML КАК ВТ_ДаннеXML
ГДЕ
	ВТ_ДаннеXML.Событие = "Выход"
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Входы.Организация КАК Организация,
	ВТ_Входы.Сотрудник КАК Сотрудник,
	ВТ_Входы.ДатаВхода КАК ДатаВхода,
	МИНИМУМ(ВТ_Выходы.ДатаВыхода) КАК ДатаВыхода
ИЗ
	ВТ_Входы КАК ВТ_Входы
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Выходы КАК ВТ_Выходы
		ПО ВТ_Входы.Организация = ВТ_Выходы.Организация
			И ВТ_Входы.Сотрудник = ВТ_Выходы.Сотрудник
			И ВТ_Входы.ДатаВхода < ВТ_Выходы.ДатаВыхода

СГРУППИРОВАТЬ ПО
	ВТ_Входы.Организация,
	ВТ_Входы.Сотрудник,
	ВТ_Входы.ДатаВхода
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. Sashares 34 02.11.23 11:14 Сейчас в теме
(1)Добавляете АвтоНомерЗаписи.
В одну временную таблицу отбираете Вход, в другую Выход.
Соединяете Вход с Выходом по Организация, Сотрудник, Автономер = Автономер + 1
Nadushka74; +1 Ответить
2. -AI- 02.11.23 10:17 Сейчас в теме
а свои, хоть какие-нибудь наброски есть?
3. eLeMeNtaLe 02.11.23 10:33 Сейчас в теме
(2)Из хотя бы маломальски рабочих, нет.
4. puzo50 02.11.23 10:36 Сейчас в теме
а если он входил-выходил несколько раз за день? (на обед ходил)
а если вошёл сегодня вышел завтра?
а если забыл пробиться и два раза вошёл?

если этого нет - в первую ВТ помещаешь иванов, день, время где чтото равно вход
во втором присоединяешь к нему чтото равно выход по иванов = иванов и день = день
5. eLeMeNtaLe 02.11.23 10:42 Сейчас в теме
(4)Здесь строгий контроль программы СКУД из которой эти данные приходят в 1С. Не может быть двойного входа без выхода, турникет выдаст ошибку и не пустит сотрудника пока охрана ему не пропишет выход. Т.е. последовательность в регистре строгая, если есть вход, то следующей записью будет обязательно выход. Даже пускай и следующим днём (сотрудник например работал в ночь).
6. eLeMeNtaLe 02.11.23 10:57 Сейчас в теме
(4)С соединением входа и выхода и возникает проблема, сотрудник может за день несколько раз выйти и зайти. Т.е. мне как то нужно соединить строку входа с следующей за ней по дате строкой выхода.
7. newlogin1 02.11.23 10:59 Сейчас в теме
(6)Если я ничего не путаю, то СКД должна сама суметь в подобное
Надо сделать Таблицу
Колонки Сотрудник
Строки Событие - у события внутри Дата.

Но лучше проверить, накидайте отчетик подергайте настройки
8. eLeMeNtaLe 02.11.23 11:05 Сейчас в теме
(7)Мне это нужно не в СКД, мне нужно получить таблицу которая в последствии будет ещё обрабатываться.
9. newlogin1 02.11.23 11:08 Сейчас в теме
(8)...
Справочку по СКД почитайте, там есть вариант вывода в таблицу значений.
11. BeerWulf 02.11.23 11:16 Сейчас в теме
Во временную таблицу помещаешь первые 100000 строк отсортированных по сотруднику и дате. В неё же добавляешь поле Автонумерация(). Затем из временной таблицы выбираешь строки где событие = "вход" и левым соединением с этой же временной таблицей ищешь его "выход" по условию сотрудникВТ1 = сотрудникВТ2 и НомерЗаписиВТ = НомерЗаписиВТ2 - 1
В (10) чуть быстрее дан ответ. Только не нужно отбирать отдельно входы и выходы во временную таблицу.
12. eLeMeNtaLe 02.11.23 11:31 Сейчас в теме
(10)
(11)Сделал почти по той схеми что вы предложили. Создал две временных таблицы, в одной только входы, в другой только выходы. Объединил их все выходы по сотруднику к каждому входу, затем сгрупировал по полю организация, сотрудник, дата входа, а поле дата выхода взял минимальную.
ВЫБРАТЬ
	ВЫРАЗИТЬ(ТЗСписка.Фирма КАК СТРОКА(100)) КАК Организация,
	ВЫРАЗИТЬ(ТЗСписка.Сотрудник КАК СТРОКА(100)) КАК Сотрудник,
	ТЗСписка.TDATETIME КАК Дата,
	ВЫРАЗИТЬ(ТЗСписка.Направление КАК СТРОКА(10)) КАК Событие
ПОМЕСТИТЬ ВТ_ДаннеXML
ИЗ
	&ТЗСписка КАК ТЗСписка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ДаннеXML.Организация КАК Организация,
	ВТ_ДаннеXML.Сотрудник КАК Сотрудник,
	ВТ_ДаннеXML.Дата КАК ДатаВхода
ПОМЕСТИТЬ ВТ_Входы
ИЗ
	ВТ_ДаннеXML КАК ВТ_ДаннеXML
ГДЕ
	ВТ_ДаннеXML.Событие = "Вход"
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ДаннеXML.Организация КАК Организация,
	ВТ_ДаннеXML.Сотрудник КАК Сотрудник,
	ВТ_ДаннеXML.Дата КАК ДатаВыхода
ПОМЕСТИТЬ ВТ_Выходы
ИЗ
	ВТ_ДаннеXML КАК ВТ_ДаннеXML
ГДЕ
	ВТ_ДаннеXML.Событие = "Выход"
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Входы.Организация КАК Организация,
	ВТ_Входы.Сотрудник КАК Сотрудник,
	ВТ_Входы.ДатаВхода КАК ДатаВхода,
	МИНИМУМ(ВТ_Выходы.ДатаВыхода) КАК ДатаВыхода
ИЗ
	ВТ_Входы КАК ВТ_Входы
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Выходы КАК ВТ_Выходы
		ПО ВТ_Входы.Организация = ВТ_Выходы.Организация
			И ВТ_Входы.Сотрудник = ВТ_Выходы.Сотрудник
			И ВТ_Входы.ДатаВхода < ВТ_Выходы.ДатаВыхода

СГРУППИРОВАТЬ ПО
	ВТ_Входы.Организация,
	ВТ_Входы.Сотрудник,
	ВТ_Входы.ДатаВхода
Показать
13. Sashares 34 02.11.23 11:35 Сейчас в теме
(12)Тоже нормальный вариант
Оставьте свое сообщение

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