Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
17 сен 2021, 18:27

Получение данных одним запросом

Автор Алексей_1985_06, 26 сен 2020, 21:13

0 Пользователей и 1 гость просматривают эту тему.

Алексей_1985_06

Всем здравствуйте!  Вопрос в следующем:
1. Есть регистр сведений "ПослужнойСписок" ресурс: Должность (тип СправочникСсылка.ШтатныеДолжности) измерение: Сотрудник
2. В справочнике "ШтатныеДолжности" есть реквизит КомандирСтруктурногоПодразделения (тип Булево) указывающий на то, что это должность командира соответствующего подразделения
Задача: в печатной форме необходимо при выборе сотрудника получить его должность и звание (из регистра сведений ПослужнойСписок) и должность и звание командира подразделения этого сотрудника (также из из регистра сведений ПослужнойСписок). Данные получаю 2-мя запросами в одной процедуре, не знаю правильно ли это?

Знатоков прошу помочь с правильностью варианта решения! Возможно ли получить данные одним запросом, или только так можно это реализовать?
Код такой:

// Запросом получаем подразделение сотрудника
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПослужнойСписокСрезПоследних.Должность.Владелец КАК ПодразделениеСотрудника
|ИЗ
| РегистрСведений.ПослужнойСписок.СрезПоследних(&Период, Сотрудник = &Сотрудник) КАК ПослужнойСписокСрезПоследних";

Запрос.УстановитьПараметр("Период",СсылкаНаДокумент.Дата);
Запрос.УстановитьПараметр("Сотрудник",СсылкаНаДокумент.Сотрудник);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
ПодразделениеСотрудника = Выборка.ПодразделениеСотрудника; // получили подразделение сотрудника
КонецЦикла;


// Определяем должность командира подразделения сотрудника
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПослужнойСписокСрезПоследних.Сотрудник.Ссылка КАК Сотрудник,
| ПослужнойСписокСрезПоследних.Должность.Наименование КАК Должность
|ИЗ
| РегистрСведений.ПослужнойСписок.СрезПоследних КАК ПослужнойСписокСрезПоследних
|ГДЕ
| ПослужнойСписокСрезПоследних.Должность.КомандирСтруктурногоПодразделения = ИСТИНА
| И ПослужнойСписокСрезПоследних.Должность.Владелец = &Подразделение";

Запрос.УстановитьПараметр("Подразделение",ПодразделениеСотрудника); // в качестве параметра установили подразделение сотрудника, полученное в предыдущем запросе

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
ДолжностьКомандира = Выборка.Должность; // получили должность командира подразделения сотрудника
КонецЦикла;

// В область заголовка  печатной формы помещаем полученные из запроса данные
ОбластьЗаголовок.Параметры.КомандирПодразделения = ДолжностьКомандира;

LexaK

попробуйте так

// Запросом получаем подразделение сотрудника
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    ПослужнойСписокСрезПоследних.Должность.Владелец КАК ПодразделениеСотрудника,
|    ПослужнойСписокСрезПоследних.Должность КАК ДолжностьСотрудника,
|    ПослужнойСписокСрезПоследних2.Должность как ДолжностьКомандира
|ИЗ
|    РегистрСведений.ПослужнойСписок.СрезПоследних(&Период, Сотрудник = &Сотрудник) КАК ПослужнойСписокСрезПоследних
|левое соединение
|    РегистрСведений.ПослужнойСписок.СрезПоследних(&Период) КАК ПослужнойСписокСрезПоследних2
|по ПослужнойСписокСрезПоследних.Должность.Владелец = ПослужнойСписокСрезПоследних2.Должность.Владелец
|  и  ПослужнойСписокСрезПоследних2.Должность.КомандирСтруктурногоПодразделения = ИСТИНА
|";


Запрос.УстановитьПараметр("Период",СсылкаНаДокумент.Дата);
Запрос.УстановитьПараметр("Сотрудник",СсылкаНаДокумент.Сотрудник);
...
ответ Понравился? (в смысле пригодился?)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск