Выпуск №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):