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

