Выпуск №49. Пример запроса 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):