helpf.pro
Регистрация

?: Задачка по запросу. Никак не соображу как сделать.

IKSparrow
02.09.2013 12:10Прочитано: 1683
Дана таблица с тремя полями.
Период, Сотрудник, Состояние.
Сведения в ней:
04.01.2013 Иванов Принят на должность уборщика
14.01.2013 Иванов Переведён на должность водителя
24.01.2013 Иванов Переведён на должность топ-менеджера
29.01.2013 Иванов Уволен

Нужно получить таблицу истории за период (&НачалоПериода, &КонецПериода), вида:

04.01.2013 13.01.2013 Иванов Уборщик
14.01.2013 23.01.2013 Иванов Водитель
24.01.2013 29.01.2013 Иванов Топ-менеджер

Вот никак не соображу, как так периоды разложить в запросе. Что-то мне подсказывает, что через внутреннее соединение, но чего с чем... Подскажите плиз.
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
02.09.2013 14:18Ответ № 1
(0) IKSparrow, это ЗУП? регистр сведений кадровые данные?
Jonsony
02.09.2013 14:28Ответ № 2
(1) E_Migachev, скорее что то типа тестов, а не реальная конфа
IKSparrow
02.09.2013 14:37Ответ № 3
Да не, это как раз реальная конфа. И да, это надстройка над ЗУПом. Что-то не выходит каменный цветок )
E_Migachev
02.09.2013 15:16Ответ № 4
что-то запросом не получается так сделать(
в ТЗ и потом ТЗ обработать - все ок
IKSparrow
02.09.2013 15:31Ответ № 5
(4) Вот я прекрасно представляю как это сделать кодом, честное слово )
Но неужели запросом никак? Я просто в соединениях уже запутался %)
E_Migachev
02.09.2013 22:58Ответ № 6
пол дня думал - так и не придумал - похоже ни как *17
Jonsony
03.09.2013 11:19Ответ № 7
тут надо в консоле запросов мозговать
создать эту ТЗ в параметрах и пробывать
Mokey
03.09.2013 12:08Ответ № 8
(5) IKSparrow, я так понимаю, что нужно в запросе из "Переведён на должность топ-менеджера" получить "Топ-менеджер" или что?
Jonsony
03.09.2013 13:37Ответ № 9
(8) Mokey, он же в первом посте нарисовал
у него есть таблица в которой зафиксированы действия по датам в отношении сотрудника

на выходе ему надо получить таблицу истории должностей сотрудника
Mokey
04.09.2013 10:08Ответ № 10
(9) Jonsony, я вижу, а где должности? в первом посте написано, что есть таблица, надо из неё получить периодами...
IKSparrow
04.09.2013 11:58Ответ № 11
(8) Да, всё верно.
Кстати, задача решается элементарно. Огромное спасибо Константину Голубеву за разъяснение и и пример.

А решение по получению подобной таблицы будет таким:

Код 1C v 8.2 УП
 
ВЫБРАТЬ
СостояниеРаботников.Период КАК ПериодС,
СостояниеРаботников.Работник,
СостояниеРаботников.Должность,
МИНИМУМ(СостояниеРаботниковСвязка.Период) КАК ПериодПо
ИЗ
РегистрСведений.СостояниеРаботников КАК СостояниеРаботников
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботников КАК СостояниеРаботниковСвязка
ПО СостояниеРаботников.Период < СостояниеРаботниковСвязка.Период
И СостояниеРаботников.Работник = СостояниеРаботниковСвязка.Работник
СГРУППИРОВАТЬ ПО
СостояниеРаботников.Сотрудник,
СостояниеРаботников.Период,
СостояниеРаботников.Должность
УПОРЯДОЧИТЬ ПО
СостояниеРаботников.Период,
IKSparrow
04.09.2013 11:59Ответ № 12
Ну и соответственно оперируя конструкциями ВЫБОР...КОГДА...ТОГДА...ИНАЧЕ...КОНЕЦ подставляем в поля записей периодов &НачалоПериода и &КонецПериода и убавляем дни на время перехода с должности на должность.
E_Migachev
04.09.2013 13:39Ответ № 13
Интересное решение)
Jonsony
04.09.2013 14:29Ответ № 14
(10) Mokey, в данных таблицы - "Принят на должность ..."

(11) IKSparrow, забавно, в стартовом посте у тебя дана таблица, а тут уже регистры сведений пошли в ход
и таки да, по регистру решение элементарно, а вот по таблице не совсем
IKSparrow
04.09.2013 14:35Ответ № 15
(14) Так ведь по таблице точно так же. Сделаем эту таблицу в ТЗ и подсунем в запрос, через ВЫБРАТЬ ... ИЗ &ТЗДляОбработки - будет то же самое. Разве я не прав?
Jonsony
04.09.2013 17:13Ответ № 16
попробуй в консоли запросов :-)
IKSparrow
05.09.2013 08:46Ответ № 17
(16) Да всё точно так же сработало ) В чём подвох?)
Mokey
09.09.2013 11:35Ответ № 18
(14) Jonsony, я же говорил, что результат не зависит от вопроса)))))
IKSparrow
09.09.2013 12:36Ответ № 19
Вопрос закрыт!
Подсказка: Вы получили ответ на свой вопрос - закройте вопрос!
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.