Выбор последней записи из непериодического регистра сведений
1С:Зарплата и кадры государственного учреждения 3
1С:Зарплата и Управление Персоналом 3.x
Запросы
Система компоновки данных
Добрый день. Будьте добры подскажите пожалуйста, Имеется регистр сведений ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам он не непериодический, в него попадают записи о том какие есть карты у сотрудников, подскажите как с помощью запроса выбрать последнюю карту сотрудников??? У меня через запрос он выбирает обе карты.
Запрос.Текст = ("ВЫБРАТЬ
| КадроваяИсторияСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
| КадроваяИсторияСотрудников.Организация КАК Организация,
| КадроваяИсторияСотрудников.Подразделение КАК Подразделение,
| КадроваяИсторияСотрудников.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
|ГДЕ
| КадроваяИсторияСотрудников.ФизическоеЛицо В(&ФизическоеЛицо)
|
|СГРУППИРОВАТЬ ПО
| КадроваяИсторияСотрудников.ФизическоеЛицо,
| КадроваяИсторияСотрудников.Подразделение,
| КадроваяИсторияСотрудников.Сотрудник,
| КадроваяИсторияСотрудников.Организация
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо КАК ФизическоеЛицо,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект КАК ЗарплатныйПроект,
| МАКСИМУМ(ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета) КАК ДатаОткрытияЛицевогоСчета
|ПОМЕСТИТЬ ВТЛицевыеСчета
|ИЗ
| ВТСотрудники КАК ВТСотрудники
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
| ПО ВТСотрудники.ФизическоеЛицо = ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо
|
|СГРУППИРОВАТЬ ПО
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТСотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
| &текущийобъектЗарплатныйпроект КАК ЗП,
| ВТЛицевыеСчета.ЗарплатныйПроект КАК ЗарплатныйПроект,
| ВТЛицевыеСчета.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета
|ИЗ
| ВТСотрудники КАК ВТСотрудники
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЛицевыеСчета КАК ВТЛицевыеСчета
| ПО ВТСотрудники.ФизическоеЛицо = ВТЛицевыеСчета.ФизическоеЛицо
|
|СГРУППИРОВАТЬ ПО
| ВТСотрудники.ФизическоеЛицо,
| ВТЛицевыеСчета.ЗарплатныйПроект,
| ВТЛицевыеСчета.ДатаОткрытияЛицевогоСчета");
ПоказатьПрикрепленные файлы:

По теме из базы знаний
Найденные решения
(1) Какую запись считать последней? Ту в которой самая поздняя дата открытия счета? А если есть несколько счетов открытых в одну дату?
"ВЫБРАТЬ
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо КАК ФизическоеЛицо,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект КАК ЗарплатныйПроект,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.НомерЛицевогоСчета КАК НомерЛицевогоСчета
|ПОМЕСТИТЬ ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
|ИЗ
| РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо КАК ФизическоеЛицо,
| МАКСИМУМ(ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета) КАК ДатаОткрытияЛицевогоСчета
|ПОМЕСТИТЬ ВТ_ПоследнийЛС
|ИЗ
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
|
|СГРУППИРОВАТЬ ПО
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо КАК ФизическоеЛицо,
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект КАК ЗарплатныйПроект,
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета,
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.НомерЛицевогоСчета КАК НомерЛицевогоСчета
|ИЗ
| ВТ_Сотрудники КАК ВТ_Сотрудники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ПоследнийЛС КАК ВТ_ПоследнийЛС
| ПО ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо = ВТ_ПоследнийЛС.ФизическоеЛицо
| И ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета = ВТ_ПоследнийЛС.ДатаОткрытияЛицевогоСчета
| ПО ВТ_Сотрудники.ФизическоеЛицо = ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Скорее всего ЗарплатныйПроект - это измерение, следовательно и Максимум отрабатывает по каждому измерению. Попробуйте в запросе, где формируется ВТЛицевыеСчета убрать выбор ЗарплатногоПроекта, оставив только максимум по дате и физическое лицо, а потом уже к этой таблице добавить зарплатный проект связав по дата = дата и физлицо = физлицо
(2)спасибо за ответ, но все равно по некоторым сотрудника запрос выбирает несколько карт
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Запрос = Новый Запрос;
Запрос.Текст = ("ВЫБРАТЬ
| КадроваяИсторияСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
| КадроваяИсторияСотрудников.Организация КАК Организация,
| КадроваяИсторияСотрудников.Подразделение КАК Подразделение,
| КадроваяИсторияСотрудников.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
|ГДЕ
| КадроваяИсторияСотрудников.ФизическоеЛицо В(&ФизическоеЛицо)
|
|СГРУППИРОВАТЬ ПО
| КадроваяИсторияСотрудников.ФизическоеЛицо,
| КадроваяИсторияСотрудников.Подразделение,
| КадроваяИсторияСотрудников.Сотрудник,
| КадроваяИсторияСотрудников.Организация
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета) КАК ДатаОткрытияЛицевогоСчета,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо КАК ФизическоеЛицо
|ПОМЕСТИТЬ ВТЛицевыеСчета
|ИЗ
| ВТСотрудники КАК ВТСотрудники
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
| ПО ВТСотрудники.ФизическоеЛицо = ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо
|
|СГРУППИРОВАТЬ ПО
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект КАК ЗарплатныйПроект,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета
|ПОМЕСТИТЬ ВТЗп
|ИЗ
| РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЛицевыеСчета КАК ВТЛицевыеСчета
| ПО ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета = ВТЛицевыеСчета.ДатаОткрытияЛицевогоСчета
| И ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо = ВТЛицевыеСчета.ФизическоеЛицо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТСотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
| &текущийобъектЗарплатныйпроект КАК ЗП,
| ВТЛицевыеСчета.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета,
| ВТЗп.ЗарплатныйПроект КАК ЗарплатныйПроект
|ИЗ
| ВТСотрудники КАК ВТСотрудники
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЛицевыеСчета КАК ВТЛицевыеСчета
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЗп КАК ВТЗп
| ПО ВТЛицевыеСчета.ДатаОткрытияЛицевогоСчета = ВТЗп.ДатаОткрытияЛицевогоСчета
| ПО ВТСотрудники.ФизическоеЛицо = ВТЛицевыеСчета.ФизическоеЛицо
|
|СГРУППИРОВАТЬ ПО
| ВТСотрудники.ФизическоеЛицо,
| ВТЛицевыеСчета.ДатаОткрытияЛицевогоСчета,
| ВТЗп.ЗарплатныйПроект");
Запрос.УстановитьПараметр("ФизическоеЛицо", ТекущийОбъект.Состав.ВыгрузитьКолонку("ФизическоеЛицо"));
Запрос.УстановитьПараметр("ТекущийОбъектЗарплатныйПроект", ТекущийОбъект.ЗарплатныйПроект);
Выборка = Запрос.Выполнить().Выбрать();
пока Выборка.Следующий() Цикл
Если Выборка.ЗарплатныйПроект <> Выборка.ЗП тогда
Отказ = истина;
Сообщить("Проверьте зарплатный проект сотрудника!" + " " + Выборка.ФизическоеЛицо + " " + Выборка.ЗарплатныйПроект);
КонецЕсли;
КонецЦикла;
Показать
(10)может быть я ошибся, суть такова открываем документ в нем список сотрудников в таблице, при проведении документа нужно сверять зарплатный проект из документа с зарплатным проектом в регистре сведений, так как у людей меняется иногда он, в регистре 2-3 записи по одному сотруднику, нужно что бы обработка сверяла только с последней записью по сотруднику
(11)Ну как я вижу эту ситуацию. Есть РС "КадроваяИсторияСотрудников". В нем есть измерение сотрудник. Далее - сотрудник обычно связан с физическим лицом, при этом у одного физического лица может быть несколько сотрудников, например совместители. Следовательно, когда устанавливается отбор по физическому лицу, вероятнее всего, в запросе оказывается на 65 записей, как планировалось, а чуть больше, в вашем случае 79. В данном случае правильнее в 1-м запросе, где формируется ВТСотрудники, устанавливать отбор не по физлицу, а по сотруднику. Но вот смотрю я на запрос и не могу понять зачем вообще вам первый запрос? Ведь отбор по физлицу можно установить в ВТЛицевыеСчета, а дальше уже оставить как есть.
(18)
может так сработает?
|ВЫБРАТЬ
| МАКСИМУМ(ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета) КАК ДатаОткрытияЛицевогоСчета,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо КАК ФизическоеЛицо
|ПОМЕСТИТЬ ВТЛицевыеСчета
|ИЗ
| РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
|ГДЕ ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо В (&ФизическиеЛица)
|
|СГРУППИРОВАТЬ ПО
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект КАК ЗарплатныйПроект,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета
|ПОМЕСТИТЬ ВТЗп
|ИЗ
| ВТЛицевыеСчета КАК ВТЛицевыеСчета
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
| ПО ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета = ВТЛицевыеСчета.ДатаОткрытияЛицевогоСчета
| И ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо = ВТЛицевыеСчета.ФизическоеЛицо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТЛицевыеСчета.ФизическоеЛицо КАК ФизическоеЛицо,
| &текущийобъектЗарплатныйпроект КАК ЗП,
| ВТЛицевыеСчета.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета,
| ВТЗп.ЗарплатныйПроект КАК ЗарплатныйПроект
|ИЗ
| ВТЛицевыеСчета КАК ВТЛицевыеСчета
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЗп КАК ВТЗп
| ПО ВТЛицевыеСчета.ДатаОткрытияЛицевогоСчета = ВТЗп.ДатаОткрытияЛицевогоСчета
|
|СГРУППИРОВАТЬ ПО
| ВТЛицевыеСчета.ФизическоеЛицо,
| ВТЛицевыеСчета.ДатаОткрытияЛицевогоСчета,
| ВТЗп.ЗарплатныйПроект");
Показатьможет так сработает?
(1) Какую запись считать последней? Ту в которой самая поздняя дата открытия счета? А если есть несколько счетов открытых в одну дату?
"ВЫБРАТЬ
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо КАК ФизическоеЛицо,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект КАК ЗарплатныйПроект,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.НомерЛицевогоСчета КАК НомерЛицевогоСчета
|ПОМЕСТИТЬ ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
|ИЗ
| РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо КАК ФизическоеЛицо,
| МАКСИМУМ(ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета) КАК ДатаОткрытияЛицевогоСчета
|ПОМЕСТИТЬ ВТ_ПоследнийЛС
|ИЗ
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
|
|СГРУППИРОВАТЬ ПО
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо КАК ФизическоеЛицо,
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект КАК ЗарплатныйПроект,
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета,
| ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.НомерЛицевогоСчета КАК НомерЛицевогоСчета
|ИЗ
| ВТ_Сотрудники КАК ВТ_Сотрудники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ПоследнийЛС КАК ВТ_ПоследнийЛС
| ПО ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо = ВТ_ПоследнийЛС.ФизическоеЛицо
| И ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета = ВТ_ПоследнийЛС.ДатаОткрытияЛицевогоСчета
| ПО ВТ_Сотрудники.ФизическоеЛицо = ВТ_ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот