|
Как получить предпоследнюю запись в регистре сведений? | ☑ | ||
---|---|---|---|---|
0
oxanka
27.09.12
✎
12:44
|
Добрый день! Есть периодический регистр сведений. Там есть запись о прекращении планового начисления сотрудника (стоит признак "Прекратить"), но нет размера прекращенного начисления. Надо получить этот размер из предыдущей записи с такими же ключевыми полями. Дата предыдущей записи неизвестна. Пробовала так
Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ ПЕРВЫЕ 1 | ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Регистратор, | ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Период, | ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник, | ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Показатель1, | ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ВидРасчета, | ПлановыеНачисленияРаботниковОрганизаций.Показатель1 КАК Показатель11 |ИЗ | РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних( | &ДатаКон, | Сотрудник = &Сотрудник | И ПодразделениеОрганизации = &Подразделение | И Действие = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)) КАК ПлановыеНачисленияРаботниковОрганизацийСрезПоследних | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК ПлановыеНачисленияРаботниковОрганизаций | ПО ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник = ПлановыеНачисленияРаботниковОрганизаций.Сотрудник | И ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Должность = ПлановыеНачисленияРаботниковОрганизаций.Должность | И ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ВидРасчета = ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета |ГДЕ | ПлановыеНачисленияРаботниковОрганизаций.Период <= ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Период | И ПлановыеНачисленияРаботниковОрганизаций.Действие <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить) | |УПОРЯДОЧИТЬ ПО | ПлановыеНачисленияРаботниковОрганизаций.Период УБЫВ"; На одном сотруднике работает, но если их несколько, то "ВЫБРАТЬ ПЕРВЫЕ 1" не спасает, а если это убрать, то к прекращенному начислению присоединятся все начисления с признаком <> прекратить. Помогите, пожалуйста. |
|||
1
Ненавижу 1С
гуру
27.09.12
✎
12:45
|
нужно фото
|
|||
2
ZanderZ
27.09.12
✎
12:45
|
(0) и зачем размер прекращенного то нужен ?
|
|||
3
oxanka
27.09.12
✎
12:46
|
(2) если была смена оклада в середине месяца, то за первую половину надо платить по старой ставке
|
|||
4
ZanderZ
27.09.12
✎
12:47
|
(3) тогда (1)
|
|||
5
pessok
27.09.12
✎
12:47
|
ну в тз выгрузи и выбери все что нужно
|
|||
6
Cyberhawk
27.09.12
✎
12:48
|
(0) Признак "прекратить" - это измерение, ресурс или реквизит регистра сведений?
|
|||
7
oxanka
27.09.12
✎
12:50
|
(6) ресурс
|
|||
8
Cyberhawk
27.09.12
✎
12:53
|
Тогда срез последних не в тему. Упорядочь по убыванию, выбери первые две записи и сгруппируй их через Максимум
|
|||
9
oxanka
27.09.12
✎
12:58
|
(8) я не могу указать количество выбираемых записей, потому что делается общий запрос по всем сотрудникам, и по нескольким может быть такая ситуация
|
|||
10
Cyberhawk
27.09.12
✎
13:01
|
(9) кинь табличку с содержимым регистра, а затем еще кинь табличку-результат желаемого запроса
|
|||
11
Cyberhawk
27.09.12
✎
13:02
|
+(10) небольшую для показательного примера, естественно
|
|||
12
НастоящееИмя
27.09.12
✎
13:03
|
а беларусски симпотичныеее
|
|||
13
oxanka
27.09.12
✎
13:05
|
белОруСки симпАтичные!
|
|||
14
Trier
27.09.12
✎
13:05
|
Вообще ответ на вопрос из заголовка дан в (5) Или что-то еще требуется?
|
|||
15
oxanka
27.09.12
✎
13:06
|
(14) как в (5) не получится, потому что этот запрос - один из 14-ти для временных таблиц
|
|||
16
Быдло замкадное
27.09.12
✎
13:11
|
напишите в 1С, пусть добавят виртуальную ьаблицу СрезПредпоследних
|
|||
17
Cyberhawk
27.09.12
✎
13:11
|
(15) если запрос пакетный, то можешь отдельно потом работать с ТЗ каждого подзапроса
|
|||
18
Кир Пластелинин
27.09.12
✎
13:13
|
(17) это в случае, если каждый пакет - это не вт)
|
|||
19
oxanka
27.09.12
✎
13:15
|
(10)
Дата Сотрудник Подразделение ВидРасчета Размер Действие График 20.10.2011 Работник Основное Оклад по часам 874 720 Начать Смена четная 04.06.2012 Работник Основное Оклад по часам Прекратить 05.06.2012 Работник Основное Оклад по часам 1 003 940 Изменить Смена четная 10.09.2012 Работник Основное Оклад по часам Прекратить 11.09.2012 Работник Основное Оклад по часам 1 155 000 Изменить Смена четная Хочу 10.09.2012 Работник Основное Оклад по часам 1 003 940 Прекратить Как-то так.... |
|||
20
oxanka
27.09.12
✎
13:15
|
(18) а он - временная таблица :(
|
|||
21
pessok
27.09.12
✎
13:18
|
(20) ну сделай тогда в своем пакете условие Оклад <> 0 и предпоследняя запись станет последней
|
|||
22
Кир Пластелинин
27.09.12
✎
13:20
|
есть дурацкая мысль. есть итоговая таблица всех записей (вт). добавляешь еще вт. в ней группируешь период по максимуму (ну или срез последних сделать). полученную таблицу соединяешь с исходной с отбором (или соединением), что бы период исх. таблицы был меньше максимального. получишь все записи без последней. ну тут опять по максимуму сгруппировать. жду летящих помидоров в свой адрес)
|
|||
23
программистище
27.09.12
✎
13:21
|
(22) +1
|
|||
24
oxanka
27.09.12
✎
13:21
|
(21) последней станет последняя, с новым окладом
|
|||
25
aspirant
27.09.12
✎
13:23
|
делаешь в запросе выбрать первые 2 с сортировкой по убыванию дат. Первая запись в результате запроса - твоя. Оклад <> 0 при этом. А фотку бы надо, это да.
|
|||
26
aspirant
27.09.12
✎
13:24
|
(25) по возрастанию то есть.
|
|||
27
oxanka
27.09.12
✎
13:25
|
(25) а если у меня несколько сотрудников, то выбрав первые 2 я потеряю данные по следующим сотрудникам...
|
|||
28
oxanka
27.09.12
✎
13:26
|
(22) как-то не поняла (((
|
|||
29
vmv
27.09.12
✎
13:26
|
ПЕРВЫЕ от соединения с ВТ по максимуму
максимум все равно получать надо однозначно тут надо заюзать Первые |
|||
30
Cyberhawk
27.09.12
✎
13:27
|
(27) приведи показательный пример со своими двумя сотрудниками, а то (19) - непоказательный
|
|||
31
Ненавижу 1С
гуру
27.09.12
✎
13:27
|
(29) не надо
|
|||
32
aspirant
27.09.12
✎
13:27
|
Сделай цикл, сделай вложенный запрос (сомневаюсь правда, что сработает). Но это уже детали. Не парьте меня - Я стратег.
|
|||
33
Кир Пластелинин
27.09.12
✎
13:28
|
о да. запрос в цикле. это пять
|
|||
34
Кир Пластелинин
27.09.12
✎
13:28
|
(28) чего именно?
|
|||
35
aspirant
27.09.12
✎
13:29
|
(33) ну да. некрасиво. но что делать. жизнь такая.
|
|||
36
aspirant
27.09.12
✎
13:29
|
(35) + она фотку не ставит - просят же как человека.
|
|||
37
Ирис_яркая
27.09.12
✎
13:29
|
(34) странный ник для мужского пола. и не ошиблась)) таки марка женщинам известна)
|
|||
38
aspirant
27.09.12
✎
13:30
|
(37) та у нас в глубинке все такие... велкам.
|
|||
39
vmv
27.09.12
✎
13:31
|
или идея 25 во вложенном запросе, т.е. основной запрос
Выбрать * Из .... Как ТаблССотрудниками ЛевоеСоединение Выбрать Первые 2 * Из ... ТаблПервые2 Упорядочить по Период Убыв ну и там уже техника |
|||
40
oxanka
27.09.12
✎
13:33
|
Дата Сотрудник Подразделение ВидРасчета Размер Действие График
20.10.2011 Работник Основное Оклад по часам 874 720 Начать Смена четная 01.01.2012 Иванов Основное Оклад по часам 2 100 000 Начать Смена четная 04.06.2012 Работник Основное Оклад по часам Прекратить 05.06.2012 Работник Основное Оклад по часам 1 003 940 Изменить Смена четная 10.09.2012 Работник Основное Оклад по часам Прекратить 11.09.2012 Работник Основное Оклад по часам 1 155 000 Изменить Смена четная 10.09.2012 Иванов Основное Оклад по часам Прекратить Смена четная 11.09.2012 Иванов Основное Оклад по часам 2 500 000 Изменить Смена четная Выбираю 2 - получаю Иванова, а Работника теряю |
|||
41
Cube
27.09.12
✎
13:34
|
(0) Как-то так:
ВЫБРАТЬ ПлановыеНачисленияРаботниковОрганизаций.Период, ПлановыеНачисленияРаботниковОрганизаций.Сотрудник, ПлановыеНачисленияРаботниковОрганизаций.Показатель1, ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета ИЗ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК ПлановыеНачисленияРаботниковОрганизаций ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ МАКСИМУМ(ВЫБОР КОГДА ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Действие = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить) ТОГДА ПлановыеНачисленияРаботниковОрганизаций.Период ИНАЧЕ ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Период КОНЕЦ) КАК Период, ПлановыеНачисленияРаботниковОрганизаций.Сотрудник КАК Сотрудник, ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета КАК ВидРасчета ИЗ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК ПлановыеНачисленияРаботниковОрганизаций ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(&ДатаКон, ) КАК ПлановыеНачисленияРаботниковОрганизацийСрезПоследних ПО ПлановыеНачисленияРаботниковОрганизаций.Сотрудник = ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник И ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета = ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ВидРасчета И ПлановыеНачисленияРаботниковОрганизаций.Период <> ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Период СГРУППИРОВАТЬ ПО ПлановыеНачисленияРаботниковОрганизаций.Сотрудник, ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета) КАК ВложенныйЗапрос ПО ПлановыеНачисленияРаботниковОрганизаций.Сотрудник = ВложенныйЗапрос.Сотрудник И ПлановыеНачисленияРаботниковОрганизаций.Период = ВложенныйЗапрос.Период И ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета = ВложенныйЗапрос.ВидРасчета ГДЕ ПлановыеНачисленияРаботниковОрганизаций.Сотрудник = &Сотрудник |
|||
42
Ахиллес
27.09.12
✎
13:34
|
Перезаполни регистр сведений, что бы при прекращении добавлялся размер начисления.
И не иии мозги людям тут. |
|||
43
Cube
27.09.12
✎
13:36
|
+(41) Возможно, дата там немного не та, но дальше, думаю, и сама разберешься :)
|
|||
44
Cyberhawk
27.09.12
✎
13:39
|
(40) что ты хочешь получить на 10.09.2012 12:00:00 и на 11.09.2012 12:00:00?
|
|||
45
0_Serg_0
27.09.12
✎
13:40
|
(0) может достаточно будет условия отсекающего записи с "прекратить"??
где Действие <> &Прекратить ?? |
|||
46
oxanka
27.09.12
✎
13:44
|
(43) спасибо, буду разбираться
|
|||
47
oxanka
27.09.12
✎
13:44
|
(44) я получаю все на 30.09.12
|
|||
48
oxanka
27.09.12
✎
13:45
|
(45) тогда я получу последнюю запись с последним окладом
|
|||
49
mistеr
27.09.12
✎
13:46
|
(0) 1. Получим последнюю запись, из нее возьмем период.
2. Получим последнюю на дату из шага 1. - это будет предпоследняя. |
|||
50
mistеr
27.09.12
✎
13:48
|
(49) Поправка в шаге 2: "последнюю на дату из шага 1 минус 1 секунда"
|
|||
51
oxanka
27.09.12
✎
13:50
|
(49) отличный план. А как получить срезпоследних на полученную в шаге 1 дату?
|
|||
52
Cube
27.09.12
✎
13:51
|
(51) В (41) так и сделано, если что. Ты хоть смотрела?
|
|||
53
oxanka
27.09.12
✎
13:52
|
(52) смотрю, но пока не поняла :(
|
|||
54
Кир Пластелинин
27.09.12
✎
13:52
|
(37) чем?) конечно по запарке можно не совсем корректно прочитать)
|
|||
55
Кир Пластелинин
27.09.12
✎
13:55
|
кстати. неплохо бы учесть, что запись по определенному сотруднику может всего одна. или это не актуально?
|
|||
56
Ахиллес
27.09.12
✎
13:55
|
(53) Внутреннее соединение (среза последних) регистра самого с собой по всем полям, кроме "Действие" в 1 таблице будет = Начать, а во второй = Прекратить.
|
|||
57
КуплюКровать
27.09.12
✎
13:55
|
делается так: берешь основную таблицу и соединяешь левым соединением со срезом последних, в ГДЕ добавляешь условие срез последних Период есть null (ну или не период, а любое поле), получается основная таблица без последних записей, а дальше группировка - дело техники
|
|||
58
Cube
27.09.12
✎
13:57
|
(53) Что там непонятного? Во вложенном запросе получаем записи на дату и все записи регистра. Соединяем эти две таблицы и, если в записи на дату "действие = прекратить", то выводим дату из полной таблицы. Полученную сводную таблицу сворачиваем и получаем максимальную дату.
Затем во внешнем запросе из всех записей регистра выбираем записи с ключевыми полями равными тем, что получили во вложенном запросе и получаем Показатель1. |
|||
59
По-читатель
27.09.12
✎
14:24
|
(0) А если Ваш запрос так подправить, будет работать?
|ВЫБРАТЬ | ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Регистратор, | ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Период, | ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник, | ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Показатель1, | ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ВидРасчета, | ПлановыеНачисленияРаботниковОрганизаций.Показатель1 КАК Показатель11 |ИЗ | РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних( | &ДатаКон, | Сотрудник = &Сотрудник | И ПодразделениеОрганизации = &Подразделение | И Действие = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)) КАК ПлановыеНачисленияРаботниковОрганизацийСрезПоследних | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних( | &ДатаКон, | Сотрудник = &Сотрудник | И ПодразделениеОрганизации = &Подразделение | И Действие <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)) КАК ПлановыеНачисленияРаботниковОрганизаций | ПО ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник = ПлановыеНачисленияРаботниковОрганизаций.Сотрудник | И ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Должность = ПлановыеНачисленияРаботниковОрганизаций.Должность | И ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ВидРасчета = ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета |
|||
60
oxanka
27.09.12
✎
14:48
|
(59) нет. получу оклад после прекращения, а надо перед
|
|||
61
oxanka
27.09.12
✎
14:54
|
(58) Cube, спасибо. Идея понятна, но пока не работает. Буду разбираться, чего не хватает.
|
|||
62
По-читатель
27.09.12
✎
14:57
|
(60) А если в параметрах второй виртуальной таблицы использовать ДатаНач (например первое число месяца)?
|
|||
63
oxanka
27.09.12
✎
14:59
|
(41) + несколько дополнительных условий = то, что надо
ВСЕМ ОГРОМНОЕ СПАСИБО ВЫБРАТЬ ПлановыеНачисленияРаботниковОрганизаций.Период, ПлановыеНачисленияРаботниковОрганизаций.Сотрудник, ПлановыеНачисленияРаботниковОрганизаций.Показатель1, ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета ИЗ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК ПлановыеНачисленияРаботниковОрганизаций ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ МАКСИМУМ(ВЫБОР КОГДА ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Действие = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить) ТОГДА ПлановыеНачисленияРаботниковОрганизаций.Период ИНАЧЕ ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Период КОНЕЦ) КАК Период, ПлановыеНачисленияРаботниковОрганизаций.Сотрудник КАК Сотрудник, ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета КАК ВидРасчета ИЗ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК ПлановыеНачисленияРаботниковОрганизаций ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних( &ДатаКон, Организация = &Организация И Действие = ЗНАЧЕНИЕ(ПЕРЕЧИСЛЕНИЕ.ВидыДействияСНачислением.ПРЕКРАТИТЬ) И Период > &ДатаНач ИЛИ ПериодЗавершения <= &ДатаКон И ПериодЗавершения > &ДатаНач И ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)) КАК ПлановыеНачисленияРаботниковОрганизацийСрезПоследних ПО ПлановыеНачисленияРаботниковОрганизаций.Сотрудник = ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник И ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета = ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ВидРасчета И ПлановыеНачисленияРаботниковОрганизаций.Период <= ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Период ГДЕ ПлановыеНачисленияРаботниковОрганизаций.Действие <> ЗНАЧЕНИЕ(ПЕРЕЧИСЛЕНИЕ.ВидыДействияСНачислением.ПРЕКРАТИТЬ) СГРУППИРОВАТЬ ПО ПлановыеНачисленияРаботниковОрганизаций.Сотрудник, ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета) КАК ВложенныйЗапрос ПО ПлановыеНачисленияРаботниковОрганизаций.Сотрудник = ВложенныйЗапрос.Сотрудник И ПлановыеНачисленияРаботниковОрганизаций.Период = ВложенныйЗапрос.Период И ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета = ВложенныйЗапрос.ВидРасчета |
|||
64
spu79
27.09.12
✎
15:12
|
непонятно зачем это? типовая нормально считает такие ситуации. А вообще-то при "изменении оклада" используют значение перечисления "изменнить", а "прекратить" используют при увольнении.
|
|||
65
oxanka
27.09.12
✎
15:15
|
(64) Некоторые сами пишут конфигурации. Может не так идеально, как в типовой, но сами. А кому-то приходится эту самописную радость поддерживать и дорабатывать...
|
|||
66
spu79
27.09.12
✎
15:59
|
сочувствую
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |