Всем привет. Конфигурация ЗУП, последняя. Регистр сведений ПлановыеНачисленияРаботниковОрганизаций. В него информация поступает из документа ВводСведенийОПлановыхНачисленияхРаботниковОрганизаций. Например, 01.04.15 - один вид начисления. 01.06.15 - другой вид начисления. 01.08.15 - еще один вид начисления. и т.д. Чем-то это похоже на периодические реквизиты в 7-ке. Нужно на заданную дату выбрать только ОДИН, действующий, вид начисления. Простое условие
ГДЕ (ПлановыеНачисленияРаботниковОрганизаций.Период <= &ДатаДокумента)
не подходит - выбираются виды начислений за предыдущие периоды. А нужен за ближаюшую дату.
Нашел вот подобное на [необходимо зарегистрироваться для просмотра ссылки]
9. Вопрос Как прочитать данные, актуальные на определенную дату, из регистра сведений «Курсы валют» с отбором по нескольким валютам (отбор по измерениям) Ответ
Запрос = Новый Запрос; МассивВалют = Новый Массив; МассивВалют.Добавить(Валюта1); МассивВалют.Добавить(Валюта2);
alexandr_f, начислений несколько. Нужно выбрать одно действующее, последнее. Проверка на прекращение начисления еще больше усложнит запрос. На демо-базе правильно заработал такой запрос:
| (ВЫБРАТЬ ПЕРВЫЕ 1 | ПлановыеНачисленияРаботниковОрганизаций.Сотрудник, | ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета | ИЗ | РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(&ДатаДокумента) КАК ПлановыеНачисленияРаботниковОрганизаций | ГДЕ | (ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета.КатегорияРасчета В | (ВЫБРАТЬ КатегорииРасчетов1.Ссылка | ИЗ Справочник.КатегорииРасчетов КАК КатегорииРасчетов1 | ГДЕ (КатегорииРасчетов1.Код = ""00000"") | )) И | (ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПроизвольнаяФормула)) | И | (ПлановыеНачисленияРаботниковОрганизаций.Действие = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Начать)) | И | (ПлановыеНачисленияРаботниковОрганизаций.Период <= &ДатаДокумента) | УПОРЯДОЧИТЬ ПО | ПлановыеНачисленияРаботниковОрганизаций.Период УБЫВ | )КАК НачисленияРаботниковОрганизаций
Обратите внимание, здесь присутствует и СрезПоследних(..), и Упорядочивание по убыванию. Смешно, не правда-ли. Упорядочивание добавил после того, как добавление СрезПоследних(..) не дало нужного эффекта - все равно выбирались все начисления. Но когда перенес все это на реальную базу, где около 1000 физ.лиц, примерно 300 сотрудников, этот запрос (как вложенный фрагмент более сложного запроса) не выдал то, что он выдавал на демо-базе. Сейчас разбираюсь, почему.
Группа: Пользователи
Сообщений: 192
Из: Украина
Спасибо сказали: 3 раз
Рейтинг: 3
Может я слабо разбираюсь в 1С. Но с точки зрения T-SQL это запрос по максимальной дате Коррелированный запрос (Max(Date),Сотрудник,Кодначисления) - это внутреннее соединение (Inner Join) Смущает
ВЫБРАТЬ ПЕРВЫЕ 1 | ПлановыеНачисленияРаботниковОрганизаций.Сотрудник, | ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета | ИЗ | РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(&ДатаДокумента) КАК ПлановыеНачисленияРаботниковОрганизаций ...................... | УПОРЯДОЧИТЬ ПО | ПлановыеНачисленияРаботниковОрганизаций.Период УБЫВ
Упрощенно: кореллированный запрос - подзапрос выполняется для каждой строки основного запроса, т.к. его параметром служат данные основного запроса. Покажите мне корреляцию в Вашем запросе типа
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!