Дорабатывая у клиента отчет по данным для предоставления в статистику - появилось несколько готовых функций, которые Вам наверняка понадобятся:
Код 1C v 8.х Функция ПолучитьКоличествоСотрудниковСНеполнымРабочимДнём(Запрос)
Запрос. Текст =
"ВЫБРАТЬ
| МАКСИМУМ(Работники.НеполноеРабочееВремя) КАК НеполноеРабочееВремя,
| Работники.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТ_СписокРаботниковНаНеполномРабочемГрафике
|ИЗ
| (ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
| РаботникиОрганизацийСрезПоследних.ГрафикРаботы.СокращенноеРабочееВремя КАК НеполноеРабочееВремя
| ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачалоПериода, Организация =Организация) КАК РаботникиОрганизацийСрезПоследних
| ГДЕ
| РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| РаботникиОрганизаций.Сотрудник,
| РаботникиОрганизаций.ГрафикРаботы.СокращенноеРабочееВремя
| ИЗ
| РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
| ГДЕ
| РаботникиОрганизаций.Период МЕЖДУНачалоПериода ИКонецПериода
| И РаботникиОрганизаций.Организация =Организация
| И РаботникиОрганизаций.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)) КАК Работники
|ГДЕ
| Работники.НеполноеРабочееВремя
|
|СГРУППИРОВАТЬ ПО
| Работники.Сотрудник
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СписокРаботниковНаНеполномРабочемГрафике.Сотрудник) КАК КоличествоСотрудниковНаСокрРабВремени
|ИЗ
| ВТ_СписокРаботниковНаНеполномРабочемГрафике КАК ВТ_СписокРаботниковНаНеполномРабочемГрафике" ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
Возврат Выборка. КоличествоСотрудниковНаСокрРабВремени
Иначе
Возврат 0
КонецЕсли ;
КонецФункции
Функция ПолучитьКоличествоСотрудниковИмевшихОтпускаБезСохраненияЗП(Запрос)
Запрос. Текст =
"ВЫБРАТЬ
| СостояниеРаботниковСрезПоследних.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТ_СотрудникиВОтпускахБезСохрЗП
|ИЗ
| РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(&НачалоПериода, Организация =Организация) КАК СостояниеРаботниковСрезПоследних
|ГДЕ
| СостояниеРаботниковСрезПоследних.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускБезСохраненияЗарплаты)
| И ВЫБОР
| КОГДА СостояниеРаботниковСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА СостояниеРаботниковСрезПоследних.ПериодЗавершения >=НачалоПериода
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И СостояниеРаботниковСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| СостояниеРаботниковОрганизаций.Сотрудник
|ИЗ
| РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций
|ГДЕ
| СостояниеРаботниковОрганизаций.Период МЕЖДУНачалоПериода ИКонецПериода
| И СостояниеРаботниковОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускБезСохраненияЗарплаты)
| И СостояниеРаботниковОрганизаций.Организация =Организация
| И СостояниеРаботниковОрганизаций.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиВОтпускахБезСохрЗП.Сотрудник) КАК КоличествоСотрудниковВОтпускеБезСохраненияЗП
|ИЗ
| ВТ_СотрудникиВОтпускахБезСохрЗП КАК ВТ_СотрудникиВОтпускахБезСохрЗП" ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
Возврат Выборка. КоличествоСотрудниковВОтпускеБезСохраненияЗП
Иначе
Возврат 0
КонецЕсли ;
КонецФункции
Функция ПолучитьКоличествоПринятыхСотрудников(Запрос)
Запрос. Текст =
"ВЫБРАТЬ
| ПриемНаРаботуВОрганизациюРаботникиОрганизации.Сотрудник
|ПОМЕСТИТЬ ВТ_СотрудникиПринятыеПоПриемуНаРаботу
|ИЗ
| Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ПриемНаРаботуВОрганизациюРаботникиОрганизации
|ГДЕ
| ПриемНаРаботуВОрганизациюРаботникиОрганизации.ДатаПриема МЕЖДУНачалоПериода ИКонецПериода
| И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Проведен
| И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Организация =Организация
| И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиПринятыеПоПриемуНаРаботу.Сотрудник) КАК КоличествоСотрудниковПринятыхНаРаботу
|ИЗ
| ВТ_СотрудникиПринятыеПоПриемуНаРаботу КАК ВТ_СотрудникиПринятыеПоПриемуНаРаботу" ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
Возврат Выборка. КоличествоСотрудниковПринятыхНаРаботу
Иначе
Возврат 0
КонецЕсли ;
КонецФункции
Функция ПолучитьКоличествоУволенныхСотрудников(Запрос)
Запрос. Текст =
"ВЫБРАТЬ
| УвольнениеИзОрганизацийРаботникиОрганизации.Сотрудник
|ПОМЕСТИТЬ ВТ_СотрудникиУволенные
|ИЗ
| Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК УвольнениеИзОрганизацийРаботникиОрганизации
|ГДЕ
| УвольнениеИзОрганизацийРаботникиОрганизации.ДатаУвольнения МЕЖДУНачалоПериода ИКонецПериода
| И УвольнениеИзОрганизацийРаботникиОрганизации.Ссылка.Проведен
| И УвольнениеИзОрганизацийРаботникиОрганизации.Ссылка.Организация =Организация
| И УвольнениеИзОрганизацийРаботникиОрганизации.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиУволенные.Сотрудник) КАК КоличествоУволенныхСотрудников
|ИЗ
| ВТ_СотрудникиУволенные КАК ВТ_СотрудникиУволенные" ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
Возврат Выборка. КоличествоУволенныхСотрудников;
Иначе
Возврат 0
КонецЕсли ;
КонецФункции
Функция ПолучитьКоличествоСотрудниковСписочногоСостава(Запрос)
Запрос. Текст =
"ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Сотрудник
|ПОМЕСТИТЬ ВТ_СотрудникиСписочногоСостава
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(ДОБАВИТЬКДАТЕ(&КонецПериода, СЕКУНДА, 1), Организация =Организация) КАК РаботникиОрганизацийСрезПоследних
|ГДЕ
| РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И (РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
| ИЛИ РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство))
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиСписочногоСостава.Сотрудник) КАК КоличествоСотрудниковСписочногоСостава
|ИЗ
| ВТ_СотрудникиСписочногоСостава КАК ВТ_СотрудникиСписочногоСостава" ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
Возврат Выборка. КоличествоСотрудниковСписочногоСостава;
Иначе
Возврат 0
КонецЕсли ;
КонецФункции
- - - - - - - - - - Использование - - - - - - - - - - - - - - - - - - -
Запрос = Новый Запрос;
Запрос. УстановитьПараметр( "Организация" , Организация) ;
Запрос. УстановитьПараметр( "НачалоПериода" , НачалоДня( мДатаНачалаПериодаОтчета) ) ;
Запрос. УстановитьПараметр( "КонецПериода" , КонецДня( мДатаКонцаПериодаОтчета) ) ;
СтруктураПолей. П0001000201 = ПолучитьКоличествоСотрудниковСНеполнымРабочимДнём( Запрос) ;
СтруктураПолей. П0001000501 = ПолучитьКоличествоСотрудниковИмевшихОтпускаБезСохраненияЗП( Запрос) ;
СтруктураПолей. П0001000601 = ПолучитьКоличествоПринятыхСотрудников( Запрос) ;
СтруктураПолей. П0001000801 = ПолучитьКоличествоУволенныхСотрудников( Запрос) ;
СтруктураПолей. П0001001201 = СтруктураПолей. П0001000801 ;
СтруктураПолей. П0001001301 = ПолучитьКоличествоСотрудниковСписочногоСостава( Запрос) ;
Нужен XML файл выгрузки данных вида(выделю как код 8-рки, т.к. выделение xlm кода нет):
Код 1C v 8.х < ? xml version= "1.0" encoding= "UTF-8" ? >
< orgstructure>
< department dep_id= "7ebb913c-e9c6-11dc-a4f2-0017311416a1" dep_name= "генеральный директор" dep_code= "П100" >
< orgposition user_id= "ba68bb79-c377-11dc-a4ca-0017311416a1" user_position_id= "ba68bb78-c377-11dc-a4ca-0017311416a1" user_position= "генеральный директор" user_is_active= "1" / >
< / department>
< department dep_id= "8132fe4a-0789-11dd-887b-001d60f0496c" dep_name= "Бухгалтерия" dep_code= "П200" >
< orgposition user_id= "21448456-15b0-11dd-80a1-00145e3710ab" user_position_id= "3c948267-df80-11dc-a4e8-0017311416a1" user_position= "специалист" user_is_active= "0" / >
< orgposition user_id= "d299614a-df9d-11dc-a4e8-0017311416a1" user_position_id= "53082fda-edf4-11dd-af3e-00145e3710ab" user_position= "заместитель главного бухгалтера" user_is_active= "1" / >
< orgposition user_id= "8132fe6c-0789-11dd-887b-001d60f0496c" user_position_id= "d299614d-df9d-11dc-a4e8-0017311416a1" user_position= "секретарь" user_is_active= "1" / >
< orgposition user_id= "2e81c20e-f190-11dc-a4fb-0017311416a1" user_position_id= "2e81c20d-f190-11dc-a4fb-0017311416a1" user_position= "бухгалтер" user_is_active= "0" / >
< orgposition user_id= "ba68bb7e-c377-11dc-a4ca-0017311416a1" user_position_id= "53082fd9-edf4-11dd-af3e-00145e3710ab" user_position= "главный бухгалтер" user_is_active= "1" / >
< orgposition user_id= "9893f85a-0403-11df-a872-00215aa545b4" user_position_id= "53073825-e5e6-11dc-a4ef-0017311416a1" user_position= "делопроизводитель" user_is_active= "1" / >
< / department>
< department dep_id= "6bb91f72-e077-11dd-bf56-00145e3710ab" dep_name= "Отдел Продаж" dep_code= "П300" >
< department dep_id= "6bb91f73-e077-11dd-bf56-00145e3710ab" dep_name= "Клиентский сервис" dep_code= "П310" >
< orgposition user_id= "02ad5122-e231-11dd-bf56-00145e3710ab" user_position_id= "6bb91f6c-e077-11dd-bf56-00145e3710ab" user_position= "Специалист" user_is_active= "1" / >
< / department>
< department dep_id= "6bb91f74-e077-11dd-bf56-00145e3710ab" dep_name= "Менеджеры" dep_code= "П320" >
< orgposition user_id= "02584921-с235-11dd-bf56-00145e3710ab" user_position_id= "7bb98f6c-e577-11dd-bf56-00145e3710ab" user_position= "Менеджер" user_is_active= "1" / >
< / department>
< / department>
< / orgstructure>
Вот код:
Код 1C v 8.х Процедура ОбойтиУровеньДерева(Строки, Запись)
Для каждого Строка из Строки Цикл
Если ПустаяСтрока( Строка( Строка. Сотрудник) ) Тогда
Запись. ЗаписатьНачалоЭлемента( "department" ) ;
Запись. ЗаписатьАтрибут( "dep_id" , Строка( Строка. ПодразделениеОрганизации. УникальныйИдентификатор( ) ) ) ;
Запись. ЗаписатьАтрибут( "dep_name" , Строка( Строка. ПодразделениеОрганизации) ) ;
Запись. ЗаписатьАтрибут( "dep_code" , СокрЛП( Строка( Строка. ПодразделениеОрганизации. Код) ) ) ;
ОбойтиУровеньДерева( Строка. Строки, Запись) ;
Запись. ЗаписатьКонецЭлемента( ) ;
Иначе
Запись. ЗаписатьНачалоЭлемента( "orgposition" ) ;
Запись. ЗаписатьАтрибут( "user_id" , Строка( Строка. Сотрудник. УникальныйИдентификатор( ) ) ) ;
Запись. ЗаписатьАтрибут( "user_position_id" , Строка( Строка. Должность. УникальныйИдентификатор( ) ) ) ;
Запись. ЗаписатьАтрибут( "user_position" , Строка( Строка. Должность) ) ;
Запись. ЗаписатьАтрибут( "user_is_active" , ? ( Строка. ПричинаИзмененияСостояния = Перечисления. ПричиныИзмененияСостояния. Увольнение, "0" , "1" ) ) ;
ОбойтиУровеньДерева( Строка. Строки, Запись) ;
Запись. ЗаписатьКонецЭлемента( ) ;
КонецЕсли
КонецЦикла ;
КонецПроцедуры
Процедура КнопкаВыгрузитьНажатие(Кнопка)
ПутьКФайлу = "D:\Vigruzka_" + Формат( ТекущаяДата( ) , "ДФ=YYYYMMdd" ) + ".xml" ;
Запись = Новый ЗаписьXML;
Запись. ОткрытьФайл( ПутьКФайлу, "UTF-8" ) ;
Запись. ЗаписатьОбъявлениеXML( ) ;
Запись. ЗаписатьНачалоЭлемента( "orgstructure" ) ;
Запрос = Новый Запрос;
Запрос. Текст= "
|ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Сотрудник,
| РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| РаботникиОрганизацийСрезПоследних.Должность,
| РаботникиОрганизацийСрезПоследних.Период,
| РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации.Порядок КАК ПодразделениеОрганизацииПорядок,
| РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(&dateper, ) КАК РаботникиОрганизацийСрезПоследних
|
|УПОРЯДОЧИТЬ ПО
| ПодразделениеОрганизацииПорядок
|ИТОГИ ПО
| ПодразделениеОрганизации ИЕРАРХИЯ
|АВТОУПОРЯДОЧИВАНИЕ
|" ;
Запрос. УстановитьПараметр( "dateper" , ТекущаяДата( ) ) ;
Результат = Запрос. Выполнить( ) ;
Дерево = Результат. Выгрузить( ОбходРезультатаЗапроса. ПоГруппировкамСИерархией) ;
ОбойтиУровеньДерева( Дерево. Строки, Запись) ;
Запись. ЗаписатьКонецЭлемента( ) ;
Запись. Закрыть( ) ;
КонецПроцедуры
Нужен Отчет, в котором было бы видно, кто и из какой организации к нам пришел?
Эти данные хранятся в Табличной части "Трудовая деятельность" справочника "ФизическиеЛица", еще нужно вывести в отчет текущую Должность и Подразделение(Выводить ПолноеНаименование, т.е со всеми родителями) работника из регистра сведений "Работники орагнизации" и получить из документа "ПриемНаРаботуВОрганизацию" Дату приема и номер документа.
1. Создаем новый отчет, открываем СКД и добавляем набор данных Запрос. Согласно нашим требованиям формируем запрос:
Код 1C v 8.х ВЫБРАТЬ
ФизическиеЛицаТрудоваяДеятельность. Ссылка,
ФизическиеЛицаТрудоваяДеятельность. НомерСтроки,
ФизическиеЛицаТрудоваяДеятельность. Организация,
ФизическиеЛицаТрудоваяДеятельность. ДатаНачала,
ФизическиеЛицаТрудоваяДеятельность. ДатаОкончания,
ФизическиеЛицаТрудоваяДеятельность. Должность КАК ДолжностьТруд,
ПриемНаРаботуВОрганизациюРаботникиОрганизации. Ссылка. Номер,
ПриемНаРаботуВОрганизациюРаботникиОрганизации. Ссылка. Дата,
РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации,
РаботникиОрганизацийСрезПоследних. Должность КАК Должность,
РаботникиОрганизацийСрезПоследних. Сотрудник. Код,
ПриемНаРаботуВОрганизациюРаботникиОрганизации. ДатаПриема,
РаботникиОрганизацийСрезПоследних. Организация КАК ОрганизацияГлавная,
ВЫБОР
КОГДА РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Родитель. Наименование ЕСТЬ NULL
ТОГДА РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Наименование
КОГДА РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Родитель. Родитель. Наименование ЕСТЬ NULL
ТОГДА РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Родитель. Наименование + " / " + РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Наименование
ИНАЧЕ РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Родитель. Родитель. Наименование + " / " + РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Родитель. Наименование + " / " + РаботникиОрганизацийСрезПоследних. ПодразделениеОрганизации. Наименование
КОНЕЦ КАК ПолныйКод
ИЗ
Справочник. ФизическиеЛица. ТрудоваяДеятельность КАК ФизическиеЛицаТрудоваяДеятельность
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений. РаботникиОрганизаций. СрезПоследних КАК РаботникиОрганизацийСрезПоследних
ПО ФизическиеЛицаТрудоваяДеятельность. Ссылка = РаботникиОрганизацийСрезПоследних. Сотрудник. Физлицо. Ссылка
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ. ПриемНаРаботуВОрганизацию. РаботникиОрганизации КАК ПриемНаРаботуВОрганизациюРаботникиОрганизации
ПО ФизическиеЛицаТрудоваяДеятельность. Ссылка = ПриемНаРаботуВОрганизациюРаботникиОрганизации. ФизЛицо. Ссылка
2. Переходим в закладку Настройки, Заполняем Выбранные поля Добавляем к отчету пустую группировку:
3. В итоге должно получиться:
4. Сохраняем и проверяем отчет, уже что-то формируется
:
5. Теперь сделаем отчет красивым. Добавим отбор по организации на форме, и создадим макет вывода. Создадим основную форму отчета, кроме существующих Элементов панели и Табличного документа "Результат" добавим на форму "ТабличноеПоле" и установим Данные: "КомпоновщикНастроек.Настройки.Отбор"
6. Откроем СКД, закладку Макеты. В табличном поле Нарисуем макет, в левом верхнем поле Добавим макет Группировки "ЗаголовокОтчета:Заголовок" и "СтрокаОтчета:Заголовок". В нижнем левом поле опишем Параметры макета, для "СтрокаОтчета:Заголовок":
7. На закладке Настройки, добавим группировки "ОрганизацияГлавная" и входящая в нее "Детальные записи". Щелкнув правой клавишей мыши на каждой группировке и выбрав из меню пункт "Установить имя..." установим именя областей созданного макета. Заполним Выбранные поля:
8. Внизу на закладке "Отбор" установим:
9. Сохраним отчет и проверим его работу, все ок
Автор:
Евгений Мигачев