:: Вопросы по 1С
Запрос начисление зарплаты
ama68
Автор

Сообщений: 5278
Откуда: Кострома
Дата регистрации: 27.04.2006
Помогите разобраться со следующим запросом:
Запрос =Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| Сотрудники.ФизическоеЛицо,
| Сотрудники.Подразделение,
| Сотрудники.Должность,
| Сотрудники.ГрафикРаботы,
| Сотрудники.ДатаНачала КАК ДатаНачала,
| Сотрудники.ДатаОкончания КАК ДатаОкончания,
| ЕСТЬNULL(ПлановыеОсновныеНачисления.ВидРасчета, ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Пустаяссылка)) КАК ВидРасчета,
| ЕСТЬNULL(ПлановыеОсновныеНачисления.Размер, 0) КАК Размер
|ИЗ
| (ВЫБРАТЬ
| ВложенныйЗапрос.ФизическоеЛицо КАК ФизическоеЛицо,
| ВложенныйЗапрос.Подразделение КАК Подразделение,
| ВложенныйЗапрос.Должность КАК Должность,
| МАКСИМУМ(ВложенныйЗапрос.ГрафикРаботы) КАК ГрафикРаботы,
| МАКСИМУМ(ВложенныйЗапрос.ДатаНачала) КАК ДатаНачала,
| МИНИМУМ(ВложенныйЗапрос.ДатаОкончания) КАК ДатаОкончания
| ИЗ
| (ВЫБРАТЬ
| СотрудникиСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,
| СотрудникиСрезПоследних.Подразделение КАК Подразделение,
| СотрудникиСрезПоследних.Должность КАК Должность,
| СотрудникиСрезПоследних.ГрафикРаботы КАК ГрафикРаботы,
| &ПериодРегистрации КАК ДатаНачала,
| КОНЕЦПЕРИОДА(&ПериодРегистрации, МЕСЯЦ) КАК ДатаОкончания
| ИЗ
| РегистрСведений.Сотрудники.СрезПоследних(&ПериодРегистрации, ) КАК СотрудникиСрезПоследних
| ГДЕ
| СотрудникиСрезПоследних.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияФизическогоЛица.Работает)
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| Сотрудники.ФизическоеЛицо,
| Сотрудники.Подразделение,
| Сотрудники.Должность,
| Сотрудники.ГрафикРаботы,
| ВЫБОР
| КОГДА Сотрудники.Состояние = ЗНАЧЕНИЕ(ПЕРЕЧИСЛЕНИЕ.СостоянияФизическогоЛица.Работает)
| ТОГДА Сотрудники.Период
| ИНАЧЕ &ПериодРегистрации
| КОНЕЦ,
| ВЫБОР
| КОГДА Сотрудники.Состояние = ЗНАЧЕНИЕ(ПЕРЕЧИСЛЕНИЕ.СостоянияФизическогоЛица.Уволен)
| ТОГДА Сотрудники.Период
| ИНАЧЕ КОНЕЦПЕРИОДА(&ПериодРегистрации, МЕСЯЦ)
| КОНЕЦ
| ИЗ
| РегистрСведений.Сотрудники КАК Сотрудники
| ГДЕ
| НАЧАЛОПЕРИОДА(Сотрудники.Период, МЕСЯЦ) = &ПериодРегистрации) КАК ВложенныйЗапрос
|
| СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.ФизическоеЛицо,
| ВложенныйЗапрос.Подразделение,
| ВложенныйЗапрос.Должность) КАК Сотрудники
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ПлановыеОсновныеНачисленияСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,
| ПлановыеОсновныеНачисленияСрезПоследних.Подразделение КАК Подразделение,
| ПлановыеОсновныеНачисленияСрезПоследних.Должность КАК Должность,
| ПлановыеОсновныеНачисленияСрезПоследних.ВидРасчета КАК ВидРасчета,
| ПлановыеОсновныеНачисленияСрезПоследних.Размер КАК Размер
| ИЗ
| РегистрСведений.ПлановыеОсновныеНачисления.СрезПоследних(&ПериодРегистрации, ) КАК ПлановыеОсновныеНачисленияСрезПоследних
| ГДЕ
| ПлановыеОсновныеНачисленияСрезПоследних.Размер <> 0
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| ПлановыеОсновныеНачисления.ФизическоеЛицо,
| ПлановыеОсновныеНачисления.Подразделение,
| ПлановыеОсновныеНачисления.Должность,
| ПлановыеОсновныеНачисления.ВидРасчета,
| ПлановыеОсновныеНачисления.Размер
| ИЗ
| РегистрСведений.ПлановыеОсновныеНачисления КАК ПлановыеОсновныеНачисления
| ГДЕ
| НАЧАЛОПЕРИОДА(ПлановыеОсновныеНачисления.Период, МЕСЯЦ) = &ПериодРегистрации
| И ПлановыеОсновныеНачисления.Размер <> 0) КАК ПлановыеОсновныеНачисления
| ПО Сотрудники.ФизическоеЛицо = ПлановыеОсновныеНачисления.ФизическоеЛицо
| И Сотрудники.Подразделение = ПлановыеОсновныеНачисления.Подразделение
| И Сотрудники.Должность = ПлановыеОсновныеНачисления.Должность
|УПОРЯДОЧИТЬ ПО
| ПлановыеОсновныеНачисления.ФизическоеЛицо,
| ПлановыеОсновныеНачисления.ВидРасчета";
Запрос.УстановитьПараметр("ПериодРегистрации",ПериодРегистрации);
ЭтотОбъект[ИмяТЧ].Загрузить(Запрос.Выполнить().Выгрузить());
Результат его работы - на картинке[attachment 36182 ]

Путаюсь, не могу разобраться в его структуре.

Цель - упростить
Ratings: 0 negative/0 positive
Re: Запрос начисление зарплаты
pasha_usue

Сообщений: 3644
Откуда: Е-бург
Дата регистрации: 06.10.2006
А занафига его упрощать?

Запрос собирает данные по перемещениям сотрудника по должностям и подразделениям за текущий месяц (РегистрСведений.Сотрудники) и к нему приляпывает последнюю должность и подразделение за все предыдущие периоды работы только если не был уволен (РегистрСведений.Сотрудники.СрезПоследних).
И по той же логике собирает плановые начисления, сколько им полагалось на последнем месте работы до &ПериодРегистрации и по всем перемещениям за текущий месяц на &ПериодРегистрации.
Потом сляпывает одно с другим. Причём в результате сляпывания, количество записей увеличится на различные виды расчетов.

Так-то нормальная логика.
Ratings: 0 negative/0 positive
Re: Запрос начисление зарплаты
ama68
Автор

Сообщений: 5278
Откуда: Кострома
Дата регистрации: 27.04.2006
Паша, привет!
Спасибо за ответ... Только я в блоках этого запроса запутался: что за что отвечает
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 2 (Гостей: 2)

© 2000-2023 Fox Club 
Яндекс.Метрика