Как получить предпоследнюю запись в регистре сведений? #631512


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

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