Выпуск №49. Пример запроса 1С с условием на выходе


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

Суть отчета в том, чтобы выяснить неиспользованные дни отпусков сотрудников на дату и расчет отпускных, исходя из регистра плановых начислений сотрудника по виду расчета "оклад по дням".

Использую типовую функцию ЗУП "ПроцедурыУправленияПерсоналом.СформироватьТекстЗапросаНеиспользованныеОтпуска(ДанныеРасчетаТекст, ПараметрыЗапроса)",  я получил временную таблицу "ВТ_НеиспользованныеОтпуска", с количеством дней неиспользованного отпуска. Эту таблицу я связал со своим запросом:

Запрос.Текст = ПроцедурыУправленияПерсоналом.СформироватьТекстЗапросаНеиспользованныеОтпуска(ДанныеРасчетаТекст, ПараметрыЗапроса)+ ";
	| //////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|Неиспользованные.Организация,
	|Неиспользованные.Сотрудник,
	|СУММА(Неиспользованные.Результат) КАК Результат
|ПОМЕСТИТЬ ВТ_НеиспользованныеОтпуска1
|ИЗ
|	ВТ_НеиспользованныеОтпуска КАК Неиспользованные 
|СГРУППИРОВАТЬ ПО
|	Неиспользованные.Организация,
|	Неиспользованные.Сотрудник 
|ИМЕЮЩИЕ 
|	СУММА(Результат) <> 0 ;
| //////////////////////////////////////
|ВЫБРАТЬ
               |	РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо КАК Физлицо,
               |	РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации КАК Подразделение,
               |	РаботникиОрганизацийСрезПоследних.Должность,
               |	НеиспользованныеОтпуска.Результат КАК НеиспользованныеДни,
               |	ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Показатель1 КАК Оклад,
               |	&ДнейВГоду,
               |	ВЫБОР
               |		КОГДА НеиспользованныеОтпуска.Результат = 0
               |			ТОГДА 0
               |		ИНАЧЕ ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Показатель1 * 12 / &ДнейВГоду * НеиспользованныеОтпуска.Результат
               |	КОНЕЦ КАК Резерв,
               |	ВЫБОР
               |		КОГДА НеиспользованныеОтпуска.Результат = 0
               |			ТОГДА 0
               |		ИНАЧЕ ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Показатель1 * 12 / &ДнейВГоду * НеиспользованныеОтпуска.Результат * 11 / 100
               |	КОНЕЦ КАК СН,
               |	УчетОсновногоЗаработкаРаботниковПодразделенияОрганизацииСрезПоследних.СпособОтраженияВБухучете.СчетДт КАК СчетУчета,
               |	ВЫБОР
               |		КОГДА НеиспользованныеОтпуска.Результат = 0
               |			ТОГДА 0
               |		ИНАЧЕ ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Показатель1 * 12 / &ДнейВГоду * НеиспользованныеОтпуска.Результат + ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Показатель1 * 12 / &ДнейВГоду * НеиспользованныеОтпуска.Результат * 11 / 100
               |	КОНЕЦ КАК Итого, 			 
						 
						 
						 
						 
	                     |	ВЫБОР
	                     |		КОГДА УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчетеСрезПоследних.СпособОтраженияВБухучете.СчетДт <> &ПустойСчет
	                     |			ТОГДА УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчетеСрезПоследних.СпособОтраженияВБухучете.СчетДт
	                     |		ИНАЧЕ УчетОсновногоЗаработкаРаботниковПодразделенияОрганизацииСрезПоследних.СпособОтраженияВБухучете.СчетДт
	                     |	КОНЕЦ КАК СчетУчетаПоРегистру,
						 
						 
									 |	ВЫБОР
				                     |		КОГДА УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчетеСрезПоследних.СпособОтраженияВБухучете.СубконтоДт1 <> &ПустоеПодразделение
				                     |			ТОГДА 
									 
									 			 |	ВЫБОР
												 |		КОГДА  УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчетеСрезПоследних.СпособОтраженияВБухучете.СчетДт В (&СчетаСпособов)
												 |			ТОГДА  УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчетеСрезПоследних.СпособОтраженияВБухучете.СубконтоДт1
							                     |		ИНАЧЕ 
												 
														 |	ВЫБОР
														 |		КОГДА  УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчетеСрезПоследних.СпособОтраженияВБухучете.СчетДт = &Счет7110
														 |			ТОГДА  УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчетеСрезПоследних.СпособОтраженияВБухучете.СубконтоДт3
									                    
														 												 
												 		 |		ИНАЧЕ УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчетеСрезПоследних.СпособОтраженияВБухучете.СубконтоДт2
												         |	КОНЕЦ

							                     |	КОНЕЦ 

									 
									 
									 
									 
									 |		ИНАЧЕ 
												 |	ВЫБОР
												 |		КОГДА 
												 
														 |	ВЫБОР
									                     |		КОГДА УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчетеСрезПоследних.СпособОтраженияВБухучете.СчетДт <> &ПустойСчет
									                     |			ТОГДА УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчетеСрезПоследних.СпособОтраженияВБухучете.СчетДт В (&СчетаСпособов)
														 
														 |		ИНАЧЕ УчетОсновногоЗаработкаРаботниковПодразделенияОрганизацииСрезПоследних.СпособОтраженияВБухучете.СчетДт В (&СчетаСпособов)
									                     |	КОНЕЦ 

						 
									         |	   ТОГДА  УчетОсновногоЗаработкаРаботниковПодразделенияОрганизацииСрезПоследних.СпособОтраженияВБухучете.СубконтоДт1
									         //|		ИНАЧЕ  УчетОсновногоЗаработкаРаботниковПодразделенияОрганизацииСрезПоследних.СпособОтраженияВБухучете.СубконтоДт2
									     |		   ИНАЧЕ
									 					 |	ВЫБОР
														 |		КОГДА  УчетОсновногоЗаработкаРаботниковПодразделенияОрганизацииСрезПоследних.СпособОтраженияВБухучете.СчетДт = &Счет7110
														 |			ТОГДА  УчетОсновногоЗаработкаРаботниковПодразделенияОрганизацииСрезПоследних.СпособОтраженияВБухучете.СубконтоДт3
									                    
														 												 
												 		 |		ИНАЧЕ УчетОсновногоЗаработкаРаботниковПодразделенияОрганизацииСрезПоследних.СпособОтраженияВБухучете.СубконтоДт2
												         |	КОНЕЦ

											   |	КОНЕЦ 
						 
		       						 |	КОНЕЦ КАК ПодразделениеПоСчету

               |ИЗ
               |	РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Дата, ) КАК РаботникиОрганизацийСрезПоследних
               |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(&Дата,НЕ Действие = &Прекратить ) КАК ПлановыеНачисленияРаботниковОрганизацийСрезПоследних
               |		ПО РаботникиОрганизацийСрезПоследних.Сотрудник = ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник
               |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчетОсновногоЗаработкаРаботниковПодразделенияОрганизации.СрезПоследних(&Дата, ) КАК УчетОсновногоЗаработкаРаботниковПодразделенияОрганизацииСрезПоследних
               |		ПО РаботникиОрганизацийСрезПоследних.Организация = УчетОсновногоЗаработкаРаботниковПодразделенияОрганизацииСрезПоследних.Организация
               |			И РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации = УчетОсновногоЗаработкаРаботниковПодразделенияОрганизацииСрезПоследних.ПодразделениеОрганизации
               |		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НеиспользованныеОтпуска1 КАК НеиспользованныеОтпуска
               |		ПО РаботникиОрганизацийСрезПоследних.Организация = НеиспользованныеОтпуска.Организация
               |			И РаботникиОрганизацийСрезПоследних.Сотрудник = НеиспользованныеОтпуска.Сотрудник
			   |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчете.СрезПоследних(&Дата, ) КАК УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчетеСрезПоследних
				|		ПО РаботникиОрганизацийСрезПоследних.Сотрудник = УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчетеСрезПоследних.Сотрудник
				|			И РаботникиОрганизацийСрезПоследних.Организация = УчетОсновногоЗаработкаРаботниковОрганизацииВРегламентированномУчетеСрезПоследних.Организация
				|ГДЕ
               |	РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> &ПарамУволен
               |	И ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ВидРасчета = &ВидРасчетаОкладПоДням
               |
               |УПОРЯДОЧИТЬ ПО
               |	РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо.Наименование
               |ИТОГИ
               |	СУММА(Резерв),
               |	СУММА(СН),
               |	СУММА(Итого)
               |ПО
               |	СчетУчетаПоРегистру,
			   |    ПодразделениеПоСчету";

Изначально все было скучно и запрос выглядел, в два раза меньше. Но потом выяснились "особенности" ведения бух учета: нужно было делать проверку на наличие сотрудника в регистре учет основного заработка в регл.учете и счет и подразделение подтягивать из этого регистра, иначе счет и подразделение брать из регистра "УчетОсновногоЗаработкаРаботниковПодразделенияОрганизации".
Тут я и познал всю мощь позднего условия выборки, когда пришлось выстроить выбор счета и подразделения, исходя из вышеперчисленных условий.

Наверх


Добавить комментарий (через VK):

Добавить комментарий к статье могут только зарегистрированные пользователи: