Полезные функции: Принятые и Уволенные, работающие сотрудники, Неполное рабочее время, Отпуск без ЗП Дорабатывая у клиента отчет по данным для предоставления в статистику - появилось несколько готовых функций, которые Вам наверняка понадобятся:
Код 1C v 8.х Функция ПолучитьКоличествоСотрудниковСНеполнымРабочимДнём(Запрос)
Запрос. Текст =
"ВЫБРАТЬ
| МАКСИМУМ(Работники.НеполноеРабочееВремя) КАК НеполноеРабочееВремя,
| Работники.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТ_СписокРаботниковНаНеполномРабочемГрафике
|ИЗ
| (ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
| РаботникиОрганизацийСрезПоследних.ГрафикРаботы.СокращенноеРабочееВремя КАК НеполноеРабочееВремя
| ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачалоПериода, Организация =Организация) КАК РаботникиОрганизацийСрезПоследних
| ГДЕ
| РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| РаботникиОрганизаций.Сотрудник,
| РаботникиОрганизаций.ГрафикРаботы.СокращенноеРабочееВремя
| ИЗ
| РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
| ГДЕ
| РаботникиОрганизаций.Период МЕЖДУНачалоПериода ИКонецПериода
| И РаботникиОрганизаций.Организация =Организация
| И РаботникиОрганизаций.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)) КАК Работники
|ГДЕ
| Работники.НеполноеРабочееВремя
|
|СГРУППИРОВАТЬ ПО
| Работники.Сотрудник
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СписокРаботниковНаНеполномРабочемГрафике.Сотрудник) КАК КоличествоСотрудниковНаСокрРабВремени
|ИЗ
| ВТ_СписокРаботниковНаНеполномРабочемГрафике КАК ВТ_СписокРаботниковНаНеполномРабочемГрафике" ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
Возврат Выборка. КоличествоСотрудниковНаСокрРабВремени
Иначе
Возврат 0
КонецЕсли ;
КонецФункции
Функция ПолучитьКоличествоСотрудниковИмевшихОтпускаБезСохраненияЗП(Запрос)
Запрос. Текст =
"ВЫБРАТЬ
| СостояниеРаботниковСрезПоследних.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТ_СотрудникиВОтпускахБезСохрЗП
|ИЗ
| РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(&НачалоПериода, Организация =Организация) КАК СостояниеРаботниковСрезПоследних
|ГДЕ
| СостояниеРаботниковСрезПоследних.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускБезСохраненияЗарплаты)
| И ВЫБОР
| КОГДА СостояниеРаботниковСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА СостояниеРаботниковСрезПоследних.ПериодЗавершения >=НачалоПериода
| ИНАЧЕ ИСТИНА
| КОНЕЦ
| И СостояниеРаботниковСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| СостояниеРаботниковОрганизаций.Сотрудник
|ИЗ
| РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций
|ГДЕ
| СостояниеРаботниковОрганизаций.Период МЕЖДУНачалоПериода ИКонецПериода
| И СостояниеРаботниковОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускБезСохраненияЗарплаты)
| И СостояниеРаботниковОрганизаций.Организация =Организация
| И СостояниеРаботниковОрганизаций.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиВОтпускахБезСохрЗП.Сотрудник) КАК КоличествоСотрудниковВОтпускеБезСохраненияЗП
|ИЗ
| ВТ_СотрудникиВОтпускахБезСохрЗП КАК ВТ_СотрудникиВОтпускахБезСохрЗП" ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
Возврат Выборка. КоличествоСотрудниковВОтпускеБезСохраненияЗП
Иначе
Возврат 0
КонецЕсли ;
КонецФункции
Функция ПолучитьКоличествоПринятыхСотрудников(Запрос)
Запрос. Текст =
"ВЫБРАТЬ
| ПриемНаРаботуВОрганизациюРаботникиОрганизации.Сотрудник
|ПОМЕСТИТЬ ВТ_СотрудникиПринятыеПоПриемуНаРаботу
|ИЗ
| Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ПриемНаРаботуВОрганизациюРаботникиОрганизации
|ГДЕ
| ПриемНаРаботуВОрганизациюРаботникиОрганизации.ДатаПриема МЕЖДУНачалоПериода ИКонецПериода
| И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Проведен
| И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Ссылка.Организация =Организация
| И ПриемНаРаботуВОрганизациюРаботникиОрганизации.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиПринятыеПоПриемуНаРаботу.Сотрудник) КАК КоличествоСотрудниковПринятыхНаРаботу
|ИЗ
| ВТ_СотрудникиПринятыеПоПриемуНаРаботу КАК ВТ_СотрудникиПринятыеПоПриемуНаРаботу" ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
Возврат Выборка. КоличествоСотрудниковПринятыхНаРаботу
Иначе
Возврат 0
КонецЕсли ;
КонецФункции
Функция ПолучитьКоличествоУволенныхСотрудников(Запрос)
Запрос. Текст =
"ВЫБРАТЬ
| УвольнениеИзОрганизацийРаботникиОрганизации.Сотрудник
|ПОМЕСТИТЬ ВТ_СотрудникиУволенные
|ИЗ
| Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК УвольнениеИзОрганизацийРаботникиОрганизации
|ГДЕ
| УвольнениеИзОрганизацийРаботникиОрганизации.ДатаУвольнения МЕЖДУНачалоПериода ИКонецПериода
| И УвольнениеИзОрганизацийРаботникиОрганизации.Ссылка.Проведен
| И УвольнениеИзОрганизацийРаботникиОрганизации.Ссылка.Организация =Организация
| И УвольнениеИзОрганизацийРаботникиОрганизации.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиУволенные.Сотрудник) КАК КоличествоУволенныхСотрудников
|ИЗ
| ВТ_СотрудникиУволенные КАК ВТ_СотрудникиУволенные" ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
Возврат Выборка. КоличествоУволенныхСотрудников;
Иначе
Возврат 0
КонецЕсли ;
КонецФункции
Функция ПолучитьКоличествоСотрудниковСписочногоСостава(Запрос)
Запрос. Текст =
"ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Сотрудник
|ПОМЕСТИТЬ ВТ_СотрудникиСписочногоСостава
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(ДОБАВИТЬКДАТЕ(&КонецПериода, СЕКУНДА, 1), Организация =Организация) КАК РаботникиОрганизацийСрезПоследних
|ГДЕ
| РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И (РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
| ИЛИ РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство))
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_СотрудникиСписочногоСостава.Сотрудник) КАК КоличествоСотрудниковСписочногоСостава
|ИЗ
| ВТ_СотрудникиСписочногоСостава КАК ВТ_СотрудникиСписочногоСостава" ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Если Выборка. Следующий( ) Тогда
Возврат Выборка. КоличествоСотрудниковСписочногоСостава;
Иначе
Возврат 0
КонецЕсли ;
КонецФункции
- - - - - - - - - - Использование - - - - - - - - - - - - - - - - - - -
Запрос = Новый Запрос;
Запрос. УстановитьПараметр( "Организация" , Организация) ;
Запрос. УстановитьПараметр( "НачалоПериода" , НачалоДня( мДатаНачалаПериодаОтчета) ) ;
Запрос. УстановитьПараметр( "КонецПериода" , КонецДня( мДатаКонцаПериодаОтчета) ) ;
СтруктураПолей. П0001000201 = ПолучитьКоличествоСотрудниковСНеполнымРабочимДнём( Запрос) ;
СтруктураПолей. П0001000501 = ПолучитьКоличествоСотрудниковИмевшихОтпускаБезСохраненияЗП( Запрос) ;
СтруктураПолей. П0001000601 = ПолучитьКоличествоПринятыхСотрудников( Запрос) ;
СтруктураПолей. П0001000801 = ПолучитьКоличествоУволенныхСотрудников( Запрос) ;
СтруктураПолей. П0001001201 = СтруктураПолей. П0001000801 ;
СтруктураПолей. П0001001301 = ПолучитьКоличествоСотрудниковСписочногоСостава( Запрос) ;
Категория:
1С Зарплата и Управление Персоналом 2.5 Подписка на событие, Проверка состояния работников при перемещении и увольнении Необходимо при Увольнении или Перемещении работников проверять - работает ли сотрудник? или он в отпуске, болеет и т.д.?
Для решение этого создадим в разделе
Подписки на события , подписку "ПриПроведенииПроверкаСостоянияРаботников"
и укажем в её свойствах:
А это код обработки из Обработчика:
Код 1C v 8.х
Процедура ПриПроведенииПроверкаСостоянияРаботниковОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
ОчиститьСообщения( ) ;
Если ТипЗнч( Источник. Ссылка) = Тип( "ДокументСсылка.УвольнениеИзОрганизаций" ) Тогда
Для Каждого Сотр из Источник. РаботникиОрганизации Цикл
Сост= РегистрыСведений. СостояниеРаботниковОрганизаций. ПолучитьПоследнее( Сотр. ДатаУвольнения, Новый Структура( "Сотрудник" , Сотр. Сотрудник) ) ;
Если НЕ Сост. Состояние = Перечисления. СостоянияРаботникаОрганизации. Работает Тогда
Если Сост. СостояниеЗавершения = Перечисления. СостоянияРаботникаОрганизации. Работает и Сотр. ДатаУвольнения < Сост. ПериодЗавершения Тогда
Сообщить( "Сотрудник " + Строка( Сотр. Сотрудник) + " на " + Формат( Сотр. ДатаУвольнения, "ДЛФ=DD" ) + " - " + Строка( Сост. Состояние) + "! Можно уволить после " + Формат( Сост. ПериодЗавершения, "ДЛФ=DD" ) , СтатусСообщения. ОченьВажное) ;
Отказ = Истина ;
ИначеЕсли НЕ Сост. СостояниеЗавершения = Перечисления. СостоянияРаботникаОрганизации. Работает и Сотр. ДатаУвольнения < Сост. ПериодЗавершения Тогда
Сообщить( "Сотрудник " + Строка( Сотр. Сотрудник) + " на " + Формат( Сотр. ДатаУвольнения, "ДЛФ=DD" ) + " - " + Строка( Сост. Состояние) + "!" , СтатусСообщения. ОченьВажное) ;
Отказ = Истина ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
ИначеЕсли ТипЗнч( Источник. Ссылка) = Тип( "ДокументСсылка.КадровоеПеремещениеОрганизаций" ) Тогда
Для Каждого Сотр из Источник. РаботникиОрганизации Цикл
Сост= РегистрыСведений. СостояниеРаботниковОрганизаций. ПолучитьПоследнее( Сотр. ДатаНачала, Новый Структура( "Сотрудник" , Сотр. Сотрудник) ) ;
Если НЕ Сост. Состояние = Перечисления. СостоянияРаботникаОрганизации. Работает Тогда
Если Сост. СостояниеЗавершения = Перечисления. СостоянияРаботникаОрганизации. Работает и Сотр. ДатаНачала < Сост. ПериодЗавершения Тогда
Сообщить( "Сотрудник " + Строка( Сотр. Сотрудник) + " на " + Формат( Сотр. ДатаНачала, "ДЛФ=DD" ) + " - " + Строка( Сост. Состояние) + "! Можно переместить после " + Формат( Сост. ПериодЗавершения, "ДЛФ=DD" ) , СтатусСообщения. ОченьВажное) ;
Отказ = Истина ;
ИначеЕсли НЕ Сост. СостояниеЗавершения = Перечисления. СостоянияРаботникаОрганизации. Работает и Сотр. ДатаНачала < Сост. ПериодЗавершения Тогда
Сообщить( "Сотрудник " + Строка( Сотр. Сотрудник) + " на " + Формат( Сотр. ДатаНачала, "ДЛФ=DD" ) + " - " + Строка( Сост. Состояние) + "!" , СтатусСообщения. ОченьВажное) ;
Отказ = Истина ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
КонецПроцедуры
Категория:
Документы Перебор значений перечисления и добавление их в подменю формы Код 1C v 8.х Для Каждого метпер Из Метаданные. Перечисления. СостоянияРаботникаОрганизации. ЗначенияПеречисления Цикл
МенюКнопки = ЭлементыФормы. ОсновныеДействияФормы. Кнопки. ПодменюНеявки. Кнопки;
НоваяКнопка = МенюКнопки. Вставить( инд, метпер. Имя, ТипКнопкиКоманднойПанели. Действие, метпер, Новый Действие( "Пометка" ) ) ;
Если НЕ ( метпер. Имя= "Работает" или метпер. Имя= "Командировка" ) тогда
НоваяКнопка. Пометка = Истина ;
КонецЕсли ;
инд= инд+ 1 ;
КонецЦикла ;
Категория:
Перечисления Кнопка ~ Программное добавление кнопок на командную панель формы Код 1C v 8.х
для каждого метпер из Метаданные. Перечисления. СостоянияРаботникаОрганизации. ЗначенияПеречисления Цикл
МенюКнопки = ЭлементыФормы. ОсновныеДействияФормы. Кнопки. ПодменюНеявки. Кнопки;
НоваяКнопка = МенюКнопки. Вставить( инд, метпер. Имя, ТипКнопкиКоманднойПанели. Действие, метпер, Новый Действие( "Пометка" ) ) ;
Если НЕ ( метпер. Имя= "Работает" или метпер. Имя= "Командировка" ) тогда
НоваяКнопка. Пометка = Истина ;
КонецЕсли ;
инд= инд+ 1 ;
КонецЦикла ;
Процедура Пометка(Кнопка)
Кнопка. Пометка= ? ( Кнопка. Пометка, Ложь , Истина ) ;
КонецПроцедуры
Следующий пример показывает как выгрузить из табличной части Подразделения, удалить повторяющиеся и в "КоманднаяПанельЗарплата" - меню "ФормированиеВедомостей" - подменю "СформироватьПоПодразделению" добавить для каждого подразделения кнопку формирования ведомости
Код 1C v 8.х
ТзПодразделений= Зарплата. ВыгрузитьКолонку( "ПодразделениеРаботника" ) ;
ТекущийИндекс = 0 ;
ВсегоЭлементов = ТзПодразделений. Количество( ) ;
Пока ТекущийИндекс < ВсегоЭлементов Цикл
Индекс2 = ТекущийИндекс + 1 ;
Пока Индекс2 < ВсегоЭлементов Цикл
Если ТзПодразделений[Индекс2 ] = ТзПодразделений[ТекущийИндекс] Тогда
ТзПодразделений. Удалить( Индекс2 ) ;
ВсегоЭлементов = ВсегоЭлементов - 1 ;
Иначе
Индекс2 = Индекс2 + 1 ;
КонецЕсли ;
КонецЦикла ;
ТекущийИндекс = ТекущийИндекс + 1 ;
КонецЦикла ;
инд= 0 ;
для каждого ТекПодразд из ТзПодразделений Цикл
МенюКнопки = ЭлементыФормы. КоманднаяПанельЗарплата. Кнопки. ФормированиеВедомостей. Кнопки. СформироватьПоПодразделению. Кнопки;
НоваяКнопка = МенюКнопки. Вставить( инд, ТекПодразд, ТипКнопкиКоманднойПанели. Действие, ТекПодразд, Новый Действие( "СформироватьВедомостиПоПодразделению" ) ) ;
инд= инд+ 1 ;
КонецЦикла ;
Категория:
Работа с Формой (Диалог) и её элементами Добавление значений в список значений Код 1C v 8.х
СписокЦен = Новый СписокЗначений;
Выборка = Справочники. ТипыЦен. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
СписокЦен. Добавить( Выборка. Ссылка, Выборка. Наценка, Истина ) ;
КонецЦикла ;
ВидИмя= "Работает" ;
СписокВидов. Добавить( Перечисления. СостоянияРаботникаОрганизации[ВидИмя]) ;
Категория:
Работа с Списком Значений