Срез последних на каждый месяц

1. set5553 29.01.17 17:11 Сейчас в теме
Всем привет. Выбираю суммы по сотрудникам за 2016 год по месяцам. Надо на каждый конец месяца вытащить подразделение из РС. Не получается совсем. В чем ошибка?



ВЫБРАТЬ
 ВзаиморасчетыСРаботниками.Сотрудник,
 МАКСИМУМ(КОНЕЦПЕРИОДА(ВзаиморасчетыСРаботниками.Период, МЕСЯЦ)) КАК Период,
 СУММА(ВзаиморасчетыСРаботниками.СуммаВзаиморасчетов) КАК Сумма
ПОМЕСТИТЬ ВТ_Выплаты
ИЗ
 РегистрНакопления.ВзаиморасчетыСРаботниками КАК ВзаиморасчетыСРаботниками
ГДЕ
 ВзаиморасчетыСРаботниками.Период МЕЖДУ &ДатаНач И &ДатаКон
СГРУППИРОВАТЬ ПО
 ВзаиморасчетыСРаботниками.Сотрудник
;
////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
 ВТ_Выплаты.Сотрудник,
 ВТ_Выплаты.Период,
 ВТ_Выплаты.Сумма,
 РаботникиОрганизацийСрезПоследних.Подразделение
ИЗ
 ВТ_Выплаты КАК ВТ_Выплаты
  ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних КАК РаботникиОрганизацийСрезПоследних
  ПО ВТ_Выплаты.Сотрудник = РаботникиОрганизацийСрезПоследних.Сотрудник
ГДЕ
 РаботникиОрганизацийСрезПоследних.Период <= ВТ_Выплаты.Период
Показать
По теме из базы знаний
Найденные решения
8. antz 31.01.17 10:34 Сейчас в теме
Как-то так

Выбрать
ВТ_Выплаты.Сотрудник,
ВТ_Выплаты.Период,
Максимум(РаботникиОрганизаций.Период) КАК ПериодПодразделения
Поместить ВТ_ПериодыПодразделений
ИЗ ВТ_Выплаты КАК ВТ_Выплаты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ПО ВТ_Выплаты.Сотрудник = РаботникиОрганизаций.Сотрудник
И ВТ_Выплаты.Период >= РаботникиОрганизаций.Период

Сгруппировать по 

ВТ_Выплаты.Сотрудник,
ВТ_Выплаты.Период,
;

Выбрать
 ВТ_Выплаты.Сотрудник,
 ВТ_Выплаты.Период,
 ВТ_Выплаты.Сумма,
 СотрудникиОрганизаций.Подразделение
ИЗ ВТ_Выплаты КАК ВТ_Выплаты
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПериодыПодразделений КАК ВТ_ПериодыПодразделений
ПО ВТ_Выплаты.Сотрудник = ВТ_ПериодыПодразделений.Сотрудник
И ВТ_Выплаты.Период = ВТ_ПериодыПодразделений.Период
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ПО ВТ_ПериодыПодразделений.Сотрудник = РаботникиОрганизаций.Сотрудник
ПО ВТ_ПериодыПодразделений.ПериодПодразделения = РаботникиОрганизаций.Период
Показать
7. утюгчеловек 39 31.01.17 10:12 Сейчас в теме
Запрос должен быть к физической таблице, а не к срезу. Погугли "тета-запрос"
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 29.01.17 20:50 Сейчас в теме
(1) ну не получается, потому что СрезПоследних это совсем другое. Мануал может глянуть для интереса. Срез последних без параметров даст на текущую дату.
Когда надо на каждый месяц, срез последних можно забыть...
3. pentanom 25 29.01.17 21:05 Сейчас в теме
(2)
Когда надо на каждый месяц, срез последних можно забыть...

или сделать запрос в цикле по месяцам ...
4. KRV_it 30.01.17 04:16 Сейчас в теме
Аналогично срезу на определенную дату. Попробуйте воспользоваться местной статьей - http://infostart.ru/public/77568/
5. vipetrov2 30.01.17 05:27 Сейчас в теме
ТекМесяц = НачалоГода(Дата);
	Для н = 1 По 12 Цикл        
		Если н > 1 Тогда
			Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ ";
			ПоместитьВ = "";
		Иначе
			ПоместитьВ = " ПОМЕСТИТЬ Подразделения";
		КонецЕсли;
		Запрос.Текст = Запрос.Текст + "
			|ВЫБРАТЬ
			|	&НачМесяца" + н + " КАК Период,
			|	РаботникиОрганизацийСрезПоследних" + н + ".Подразделение
			|" + ПоместитьВ + "
			|ИЗ
			|	РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачМесяца" + н + ") КАК РаботникиОрганизацийСрезПоследних" + н + "
			|";
		Запрос.УстановитьПараметр("НачМесяца" + н, НачалоМесяца(ТекМесяц));
		ТекМесяц = ДобавитьМесяц(ТекМесяц, 1);
	КонецЦикла;
Показать


Есть еще второй вариант, но его надо тестировать.
Формируем СписокЗначений из дат, например, первые числа каждого месяца и передаем в Запрос.

ВЫБРАТЬ
	СписокДат.Значение
ПОМЕСТИТЬ СписокДат
ИЗ &СписокДат КАК СписокДат;
;
ВЫБРАТЬ РАЗЛИЧНЫЕ		
	СписокДат.Значение КАК Дата,
	РаботникиОрганизаций.Подразделение
ИЗ
	СписокДат
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
		ПО  НАЧАЛОПЕРИОДА(РаботникиОрганизаций.Период, МЕСЯЦ) = НАЧАЛОПЕРИОДА(СписокДат.Значение, МЕСЯЦ))
Показать
6. PhoenixAOD 62 30.01.17 07:21 Сейчас в теме
(5) с остатками на каждый день сработает, а вот со срезом последних мне кажется не будет результата
7. утюгчеловек 39 31.01.17 10:12 Сейчас в теме
Запрос должен быть к физической таблице, а не к срезу. Погугли "тета-запрос"
9. set5553 01.02.17 11:27 Сейчас в теме
(7) да, попутал чет. сделал через физическую таблицу
8. antz 31.01.17 10:34 Сейчас в теме
Как-то так

Выбрать
ВТ_Выплаты.Сотрудник,
ВТ_Выплаты.Период,
Максимум(РаботникиОрганизаций.Период) КАК ПериодПодразделения
Поместить ВТ_ПериодыПодразделений
ИЗ ВТ_Выплаты КАК ВТ_Выплаты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ПО ВТ_Выплаты.Сотрудник = РаботникиОрганизаций.Сотрудник
И ВТ_Выплаты.Период >= РаботникиОрганизаций.Период

Сгруппировать по 

ВТ_Выплаты.Сотрудник,
ВТ_Выплаты.Период,
;

Выбрать
 ВТ_Выплаты.Сотрудник,
 ВТ_Выплаты.Период,
 ВТ_Выплаты.Сумма,
 СотрудникиОрганизаций.Подразделение
ИЗ ВТ_Выплаты КАК ВТ_Выплаты
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПериодыПодразделений КАК ВТ_ПериодыПодразделений
ПО ВТ_Выплаты.Сотрудник = ВТ_ПериодыПодразделений.Сотрудник
И ВТ_Выплаты.Период = ВТ_ПериодыПодразделений.Период
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ПО ВТ_ПериодыПодразделений.Сотрудник = РаботникиОрганизаций.Сотрудник
ПО ВТ_ПериодыПодразделений.ПериодПодразделения = РаботникиОрганизаций.Период
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот