&НаСервере
Процедура СведенияОбОрганизацииНаСервере()
//Без передачи списка показателей возвращаются все доступные значения показатели
//Если нужно значение конкретного показателя см. подробнее ЗарплатаКадрыБазовый.ПолучитьСведенияОбОрганизации
СведенияОбОрганизации = ЗарплатаКадрыБазовый.ПолучитьСведенияОбОрганизации(Объект.Организация,ТекущаяДата(), );
КонецПроцедуры
ЗапрашиваемыеЗначения = Новый Структура;
ЗапрашиваемыеЗначения.Вставить("Организация", Объект.Документ.Организация);
ЗапрашиваемыеЗначения.Вставить("Руководитель");
ЗапрашиваемыеЗначения.Вставить("ДолжностьРуководителя");
ЗапрашиваемыеЗначения.Вставить("ГлавныйБухгалтер");
ЗапрашиваемыеЗначения.Вставить("РуководительКадровойСлужбы");
ЗапрашиваемыеЗначения.Вставить("ДолжностьРуководителяКадровойСлужбы");
ДатаВЗапросОтветственных = Объект.Документ.Дата;
//!!! ПОЗВОЛЯЕТ ПОЛУЧИТЬ ДАННЫЕ ТОЛЬКО НА ДАТУ СЕАНСА
ЗарплатаКадры.ПолучитьЗначенияПоУмолчанию(ЗапрашиваемыеЗначения, ДатаВЗапросОтветственных);
ФИОГлБух = "";
Если ФизическиеЛицаЗарплатаКадры.Просклонять(ЗапрашиваемыеЗначения.ГлавныйБухгалтер.Наименование, 3, ФИОГлБух,
?(ЗапрашиваемыеЗначения.ГлавныйБухгалтер.Пол = Перечисления.ПолФизическогоЛица.Мужской, 1, 2)) Тогда
//Область3.Параметры.ФИОГлБух = ФИОГлБух;
КонецЕсли;
ОбластьМакетаПриказ.Параметры.ФИОГлавныйБухгалтер = ФизическиеЛицаЗарплатаКадрыКлиентСервер.ФамилияИнициалы(ФИОГлБух);
ОбластьПодписиРуководитель.Параметры.ФИО = ФизическиеЛицаЗарплатаКадры.РасшифровкаПодписи(ЗапрашиваемыеЗначения.Руководитель);
ОбластьПодписиРуководитель.Параметры.Должность = ЗапрашиваемыеЗначения.ДолжностьРуководителя;
//ОТВЕТСТВЕННЫЕ ЛИЦА НА ЗАДАННУЮ ДАТУ
ДатаВЗапросОтветственных = ДАТА(2019,09,02);
ЗапрашиваемыеЗначения = СведенияОбОтветственныхЛицах.СведенияОбОтветственныхЛицах(Выборка.Организация, "Руководитель,ДолжностьРуководителя", ДатаВЗапросОтветственных);
Процедура ПриСозданииНаСервере
ЗначенияДляЗаполнения = Новый Структура("Организация",
"Объект.Организация");
ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(ЭтаФорма, ЗначенияДляЗаполнения);
КонецПроцедуры
//Функция возвращает данные позиции штатного расписания на заданную дату в виде таблицы значений
ДанныеПозиции = УправлениеШтатнымРасписанием.ДанныеПозицииШтатногоРасписания(Позиция, ТекущаяДата(), Истина);
//Пример функция для получения актуальных работающих сотрудников за период
//Возвращается таблица значений
Функция ПроверитьНаличиеПодработки(Сотрудник, ДатаНазначения)
СтруктураДанных = Новый Структура();
СтруктураДанных.Вставить("ДатаНачала",);
СтруктураДанных.Вставить("ДатаОкончания",);
СтруктураДанных.Вставить("РазмерОклада",);
ПараметрыПолучения = ПолучитьПараметры();
ПараметрыПолучения.Организация = ЭтотОбъект.Организация;
//Если ЗначениеЗаполнено(Подразделение) Тогда
// ПараметрыПолучения.Подразделение = Подразделение;
//КонецЕсли;
//Если ВключаяУволенныхНаНачалоПериода Тогда
// ПараметрыПолучения.ВключаяУволенныхНаНачалоПериода = Истина;
//КонецЕсли;
ПараметрыПолучения.НачалоПериода = НачалоМесяца(ДатаНазначения);
ПараметрыПолучения.ОкончаниеПериода = КонецМесяца(ДатаНазначения);
ПараметрыПолучения.ПодработкиРаботниковПоТрудовымДоговорам = Истина;
ПараметрыПолучения.РаботникиПоДоговорамГПХ = Ложь;
// ОТБОР ПО ВИДУ ЗАНЯТОСТИ РАБОТАЕТ ТОЛЬКО НАЧИНАЯ С РЕДАКЦИИ 3.1.7
//ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
// ПараметрыПолучения.Отборы, "ВидЗанятости", "=", Перечисления.ВидыЗанятости.Подработка);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
ПараметрыПолучения.Отборы, "ФизическоеЛицо", "=", Сотрудник.ФизическоеЛицо);
ПараметрыПолучения.КадровыеДанные = "Сотрудник,ФизическоеЛицо,Подразделение,Должность,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ВидЗанятости,ДатаПриема,ДатаУвольнения,ГрафикРаботы";
ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения);
Возврат ТаблицаСотрудников;
КонецФункции
&НаСервере
Функция ПолучитьПараметры()
Возврат КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
КонецФункции
//Функция возвращает актуальные плановые начисления сотрудников на заданную дату в виде таблицы значений
ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудника(Сотрудник, ТекущаяДата(),,);
//Или для списка сотрудников
ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудник, ТекущаяДата(),,);
Функция ПолучитьОплату(ДокументПечати,ИдентификаторСтрокиСотрудника,Ставка, Сотрудник, ДатаНачала)
ПредставлениеТарифнойСтавки = "";
ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудника(Сотрудник, КонецДня(ДатаНачала),,);
Для Каждого Строка Из ТекущиеДанныеОплатыТруда Цикл
Размер = Строка.Значение[0].Размер;
Для Каждого СтрокаП Из Строка.Значение[0].Показатели Цикл
РазмерП = "";
Если СтрокаП.Ключ = Строка.Значение[0].ОсновнойПоказатель Тогда
Если СтрокаП.Ключ.Идентификатор = "Оклад" Тогда
ИначеЕсли СтрНайти(СтрокаП.Ключ.Идентификатор, "Стаж") Тогда
ТаблицаСотрудников = Новый ТаблицаЗначений();
ТаблицаСотрудников.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ТаблицаСотрудников.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата"));
СтрокаТС = ТаблицаСотрудников.Добавить();
СтрокаТС.Сотрудник = Сотрудник;
СтрокаТС.Период = КонецДня(ДатаНачала);
ТаблицаСтажей = КадровыйУчетРасширенный.СведенияОСтажахСотрудников(ТаблицаСотрудников);
Для каждого СтрокаТС Из ТаблицаСтажей Цикл
Для каждого СтрокаТС_Все Из СтрокаТС.Значение Цикл
Если СтрокаТС_Все.Ключ = СтрокаП.Ключ.ВидСтажа Тогда
Для каждого СтрокаШкалыСтажа Из СтрокаП.Ключ.ШкалаОценкиСтажа Цикл
Если СтрокаШкалыСтажа.ВерхняяГраницаИнтервалаСтажа >= (СтрокаТС_Все.Значение.Лет*12) Тогда
РазмерП = " (" + СтрокаШкалыСтажа.ЗначениеПоказателя + "%)";
Прервать;
КонецЕсли;
Если СтрокаШкалыСтажа.НомерСтроки = СтрокаП.Ключ.ШкалаОценкиСтажа.Количество() Тогда
РазмерП = " (" + СтрокаШкалыСтажа.ЗначениеПоказателя + "%)";
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Иначе
РазмерП = " (" + СтрокаП.Значение + "%)";
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПредставлениеТарифнойСтавки = ПредставлениеТарифнойСтавки + Строка.Ключ + " " + Размер + РазмерП + Символы.ПС;
КонецЦикла;
Возврат ПредставлениеТарифнойСтавки;
КонецФункции
ЕЩЕ ОДИН ВАРИАНТ, НО УЖЕ НЕ МОЙ
Процедура
ДанныеСотрудников = Новый ТаблицаЗначений();
ДанныеСотрудников.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ДанныеСотрудников.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата"));
ДС_НС = ДанныеСотрудников.Добавить();
ДС_НС.Сотрудник = Сотрудник;
ДС_НС.Период = ДатаПриема;
ТаблицаСтажей = КадровыйУчетРасширенный.СведенияОСтажахСотрудников(ДанныеСотрудников);
Проц = ПолучитьПроцентСтажа(Сотрудник.ФизическоеЛицо, Выборка.Начисление, ДатаПриема);
КонецПроцедуры
Функция ПолучитьПроцентСтажа(СсылкаФиз,Начисление,ДатаПриема)
НачНаим=Начисление.Наименование;
Показатели=Начисление.Показатели;
Показатель=Показатели[0].Показатель; //Ссылка на показатель
ВидСтажа=Показатель.ВидСтажа;
Д2=ДатаПриема;
Если ТипЗнч(Д2)<>Тип("Дата") тогда Возврат ""; КонецЕсли;
Если Д2=Дата(1,1,1) тогда Возврат ""; КонецЕсли;
ТекстЗапроса=
"ВЫБРАТЬ
| СтажиФизическихЛиц.ФизическоеЛицо.Ссылка,
| СтажиФизическихЛиц.ВидСтажа.Ссылка,
| СтажиФизическихЛиц.ВидСтажа.КатегорияСтажа.Ссылка,
| СтажиФизическихЛиц.ДатаОтсчета,
| СтажиФизическихЛиц.РазмерМесяцев,
| СтажиФизическихЛиц.РазмерДней,
| СтажиФизическихЛиц.ИсчисляетсяСДатыПриема
|ИЗ
| РегистрСведений.СтажиФизическихЛиц КАК СтажиФизическихЛиц
|ГДЕ
| СтажиФизическихЛиц.ФизическоеЛицо.Ссылка = &СсылкаФиз
| И СтажиФизическихЛиц.ВидСтажа.Ссылка = &ВидСтажаСсыл
|
|СГРУППИРОВАТЬ ПО
| СтажиФизическихЛиц.ФизическоеЛицо.Ссылка,
| СтажиФизическихЛиц.ВидСтажа.Ссылка,
| СтажиФизическихЛиц.ВидСтажа.КатегорияСтажа.Ссылка,
| СтажиФизическихЛиц.ДатаОтсчета,
| СтажиФизическихЛиц.РазмерМесяцев,
| СтажиФизическихЛиц.РазмерДней,
| СтажиФизическихЛиц.ИсчисляетсяСДатыПриема";
Запрос=Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("СсылкаФиз",СсылкаФиз);
Запрос.УстановитьПараметр("ВидСтажаСсыл",ВидСтажа);
Результат=Запрос.Выполнить();
Таб=Результат.Выгрузить();
Если не Таб.Количество() тогда Возврат ""; КонецЕсли;
//Вычисляем количество месяцев стажа:
СтрТаб=Таб[0];
Сут0=СтрТаб.РазмерДней;
Мес0=СтрТаб.РазмерМесяцев;
Д1=СтрТаб.ДатаОтсчета;
Д1=?(ТипЗнч(Д1)<>Тип("Дата"),Д2,?(Д1=Дата(1,1,1),Д2,Д1));
С=Дата_Разность(Д1,Д2,4);
//Мес=С.Мес;
//Сут=С.Сут;
Мес=0;
Сут=0;
Мес=Мес0+Мес;
Сут=Сут0+Сут;
Мес=Мес+Цел(Сут/30.4375);
КолМес=Дата_Разность(Д1,Д2,4).Мес+Мес+Цел(Сут/30);
//
Если КолМес=0 тогда Возврат 0; КонецЕсли;
//
//Вычисляем процент:
ТабШкала=Показатель.ШкалаОценкиСтажа; Проц=0; ПредГр=0;
Для каждого Стр из ТабШкала цикл Гр=Стр.ВерхняяГраницаИнтервалаСтажа;
Если ((КолМес>=ПредГр) и (КолМес<Гр)) или (Гр=0) тогда Проц=Стр.ЗначениеПоказателя; Прервать; КонецЕсли;
ПредГр=Гр;
КонецЦикла;
//
Возврат Проц;
КонецФункции //
Функция Дата_Разность(ДатВх1="",ДатВх2="",РеквизитРасчета=1,Вывод=1,Расширенно=Истина) Экспорт
Расш=?(ТипЗнч(Расширенно)=Тип("Булево"),Расширенно,Ложь);
Выв=?(ТипЗнч(Вывод)<>Тип("Число"),0,Цел(Вывод)); Выв=?((Выв>2) или (Выв<1),0,Выв);
//Определяем код реквизита расчета:
КодР=Дата_КодРеквизита(РеквизитРасчета,Истина); ТипР=КодР.ТипРеквизита; КодР=КодР.КодРеквизита;
Если (КодР=0) или (КодР>10) тогда КодР=1; ТипР="Год"; КонецЕсли; //выбираем Рекв.рачета - Год //
//
Дата1=?(ТипЗнч(ДатВх1)<>Тип("Дата"),Дата(1,1,1,0,0,0),ДатВх1);
Дата2=?(ТипЗнч(ДатВх2)<>Тип("Дата"),ТекущаяДата(),ДатВх2);
//
Если Дата2>=Дата1 тогда Дат2=Дата2; Дат1=Дата1; У=1;
Иначе Дат2=Дата1; Дат1=Дата2; У=-1;
КонецЕсли;
Год=0; Плг=0; Квт=0; Мес=0; Дек=0; Нед=0; Сут=0; Час=0; Мин=0; Сек=0; РеквНач=10; ОстМ=0; ОстС=0; РеквОст=10; Фл=0;
Если Дат2<>Дат1 тогда
//"КАЛЕНДАРНАЯ" разность (Год,Полугодие,Квартал,Месяц)_________________________________________________________________________________
Если КодР<5 тогда Г1=Год(Дат1); Г2=Год(Дат2); М1=Месяц(Дат1); М2=Месяц(Дат2); Д1=День(Дат1); Д2=День(Дат2);
М=12*(Г2-Г1)+М2-М1; Год=Цел(М/12); Мес=М%12; //М - разность в целых месяцах
Если Д2>=Д1 тогда
Се=(Дат2-НачалоМесяца(Дат2))-(Дат1-НачалоМесяца(Дат1)); //Остаток секунд
Иначе М=М-1; Год=Цел(М/12); Мес=М%12; //М - разность в целых месяцах
ДК1=День(КонецМесяца(ДобавитьМесяц(Дат1,М)));
Се=(ДК1-Д1+Д2+1)*86400-1; //Остаток, секунд
КонецЕсли;
Сут=Цел(Се/86400); //Сутки
Се1=Се%86400; Час=Цел(Се1/3600); О=Се1%3600; Мин=Цел(О/60); Сек=О%60;
Плг=Цел(Мес/6); //(целых Полугодий в пределах Года - справочно)
Квт=Цел(Мес/3); //(целых Кварталов в пределах Года - справочно)
Дек=Цел(Сут/10); //(целых Декад в пределах Месяца - справочно)
Нед=Цел(Сут/7); //(целых Недель в пределах Месяца - справочно)
ОстМ=Мес; //Остаток месяцев
ОстС=Се; //Остаток секунд
Фл=(Год>0);
//Получили значения основных реквизитов: Год,Мес,Сут,Час,Мин,Сек. //расчет в ГОДАХ
//
ТипР="Нео";
Если КодР=1 тогда ТипР="Год";
ИначеЕсли КодР=2 тогда ТипР="Плг"; Год=0; Плг=Цел(М/6); Мес=М%6; Квт=Цел(Мес/3); Фл=(Плг>0); ОстМ=Мес; ОстС=Се; //расчет в ПОЛУГОДИЯХ
ИначеЕсли КодР=3 тогда ТипР="Квт"; Год=0; Плг=0; Квт=Цел(М/3); Мес=М%3; Фл=(Квт>0); ОстМ=Мес; ОстС=Се; //расчет в КВАРТАЛАХ
ИначеЕсли КодР=4 тогда ТипР="Мес";Год=0; Плг=0; Квт=0; Мес=М; Фл=(Мес>0); ОстМ=0; ОстС=Се; //расчет в МЕСЯЦАХ
КонецЕсли;
//"АБСОЛЮТНАЯ" разность________________________________________________________________________________________________________________
Иначе С=Дат2-Дат1; Год=0; Плг=0; Квт=0; Мес=0; ОстМ=0;
Если КодР=5 тогда ТипР="Дек"; //в ДЕКАДАХ (вернее - десятидневках!)
Дек=Цел(С/864000); Фл=(Дек>0); ОстС=С%864000; Сут=Цел(ОстС/86400); С=ОстС%86400; Час=Цел(С/3600); С=С%3600; Мин=Цел(С/60); Сек=С%60;
ИначеЕсли КодР=6 тогда Дек=0; ТипР="Нед"; //в НЕДЕЛЯХ (вернее - семидневках!)
Нед=Цел(С/604800); Фл=(Нед>0); ОстС=С%604800; Сут=Цел(ОстС/86400); С=ОстС%86400; Час=Цел(С/3600); С=С%3600; Мин=Цел(С/60); Сек=С%60;
ИначеЕсли КодР=7 тогда Дек=0; Нед=0; ТипР="Сут"; //в СУТКАХ
Сут=Цел(С/86400); Фл=(Сут>0); ОстС=С%86400; Час=Цел(ОстС/3600); С=ОстС%3600; Мин=Цел(С/60); Сек=С%60;
ИначеЕсли КодР=8 тогда ТипР="Час"; Дек=0; Нед=0; Сут=0; Час=Цел(С/3600); Фл=(Час>0); ОстС=С%3600; Мин=Цел(ОстС/60); Сек=ОстС%60; //в ЧАСАХ
ИначеЕсли КодР=9 тогда ТипР="Мин"; Дек=0; Нед=0; Сут=0; Час=0; Мин=Цел(С/60); Фл=(Мин>0); Сек=С%60; ОстС=Сек; //в МИНУТАХ
ИначеЕсли КодР=10 тогда ТипР="Сек"; Дек=0; Нед=0; Сут=0; Час=0; Мин=0; Сек=С; Фл=(Сек>0); ОстС=0; //в СЕКУНДАХ
КонецЕсли;
КонецЕсли;
КонецЕсли;
//ВЫХОД_______________________________________________________
///////////////////////////////////////////////////////////////
Если ОстМ тогда РеквОст=4; ТипРеквОст="Мес";
ИначеЕсли ОстС тогда
Если Цел(ОстС/86400) тогда РеквОст=7; ТипРеквОст="Сут";
ИначеЕсли Цел(ОстС/3600) тогда РеквОст=8; ТипРеквОст="Час";
ИначеЕсли Цел(ОстС/60) тогда РеквОст=9; ТипРеквОст="Мин";
Иначе РеквОст=10; ТипРеквОст="Сек";
КонецЕсли;
Иначе РеквОст=0; ТипРеквОст="Нео";
КонецЕсли;
//В Структуру:
Если Вывод=1 тогда
Вых=Новый Структура("РеквНач,Год,Плг,Квт,Мес,Дек,Нед,Сут,Час,Мин,Сек,Нач,РеквОст,ОстМес,ОстСек",
ТипР,Год*У,Плг*У,Квт*у,Мес*У,Дек*У,Нед*У,Сут*У,Час*У,Мин*У,Сек*У,ТипРеквОст,ОстМ,ОстС);
//В Массив:
ИначеЕсли Вывод=2 тогда Вых=Новый Массив; Вых.Добавить(КодР); //Начальный значащий Реквизит(0)
Вых.Добавить(Год*У); Вых.Добавить(Плг*У); Вых.Добавить(Квт*У); Вых.Добавить(Мес*У); //Год,Плг,Квт,Мес (1,2,3,4)
Вых.Добавить(Дек*У); Вых.Добавить(Нед*У); Вых.Добавить(Сут*У); //Дек,Нед,Сут (5,6,7)
Вых.Добавить(Час*У); Вых.Добавить(Мин*У); Вых.Добавить(Сек*У); //Час,Мин,Сек (8,9,10)
Вых.Добавить(РеквОст); Вых.Добавить(ОстМ); Вых.Добавить(ОстС); //РеквОст,ОстМес,ОстСек (11,12,13)
Иначе
Вых=""+(Год*У)+"."+(Мес*У)+"."+(Сут*У)+" "+(Час*У)+":"+(Мин*У)+":"+(Сек*У);
КонецЕсли;
Если Фл или (Дат1=Дат2) или (не Расш) или (Выв=0) тогда Возврат Вых; КонецЕсли;
//Находим после Реквизита Расчета первый реквизит ,имеющий не нулевое значение:
Сч=-1; РеквНач=0;
Для каждого стр из Вых Цикл Сч=Сч+1; Зн=?(Вывод=2,Стр,Стр.Значение);
Если Сч>10 тогда Прервать; КонецЕсли;
Если (Сч<=КодР) или Найти("2356",Сч) тогда Продолжить; КонецЕсли; //нужны только основные реквизиты
Если Зн и (РеквНач=0) тогда РеквНач=Сч; Прервать; КонецЕсли; //начальный значащий реквизит
КонецЦикла;
Возврат Дата_Разность(Дата1,Дата2,РеквНач,Выв);
КонецФункции
Функция Дата_КодРеквизита(КодИлиТипРеквизита,ВозвращатьКодИТипРеквизита=Ложь) Экспорт
//Возвращает Код Реквизита
// или Структуру с Кодом и Типом.
/////////////////////////////////////////////////////////////
//
КТ=КодИлиТипРеквизита; Т=ТипЗнч(КТ);
Если Т=Тип("Число") тогда КодР=КТ; //Числовой Код Реквизита
ИначеЕсли Т=Тип("Строка") тогда //Строковое представление Кода или Тип Реквизита
КТ=СокрЛП(Врег(КТ)); С3=Лев(КТ,3);
Если КТ="" тогда КодР=0;
ИначеЕсли С3="ЧАС" тогда КодР=8;
ИначеЕсли С3="МИН" тогда КодР=9;
ИначеЕсли С3="СЕК" тогда КодР=10;
Иначе С1=Лев(КТ,1); С2=Лев(Кт,2);
Если С2="10" тогда КодР=10;
Иначе Н=Найти("123456789",С1);
Если Н тогда КодР=Н;
Иначе КодР=Найти("ГПКМДНС",С1)
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе КодР=0; //Не понятный тип
КонецЕсли;
КодР=?((КодР>10) или (КодР<0),0,КодР);
//
Если не ВозвращатьКодИТипРеквизита тогда Возврат КодР; КонецЕсли;
Если КодР=0 тогда ТипР="Нео";
ИначеЕсли КодР=1 тогда ТипР="Год";
ИначеЕсли КодР=2 тогда ТипР="Плг";
ИначеЕсли КодР=3 тогда ТипР="Квт";
ИначеЕсли КодР=4 тогда ТипР="Мес";
ИначеЕсли КодР=5 тогда ТипР="Дек";
ИначеЕсли КодР=6 тогда ТипР="Нед";
ИначеЕсли КодР=7 тогда ТипР="Сут";
ИначеЕсли КодР=8 тогда ТипР="Час";
ИначеЕсли КодР=9 тогда ТипР="Мин";
ИначеЕсли КодР=10 тогда ТипР="Сек";
КонецЕсли;
Возврат Новый Структура("КодРеквизита,ТипРеквизита",КодР,ТипР);
КонецФункции
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Строка),
"Организация,ФизическоеЛицо,ТабельныйНомер,Подразделение,Должность,ВидЗанятости,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ДатаПриема,ДатаУвольнения,ГрафикРаботы,СтатьяФинансирования, РазрядКатегория ", ТекущаяДата());
В статье описаны более подробно все возможные запрашиваемые данные: //infostart.ru/public/938015/
Перечень всех запрашиваемых кадровых данных можно увидеть в описании функций:
КадровыйУчетВнутренний.ЗапросВТКадровыеДанныеСотрудников
КадровыйУчетВнутренний.ЗапросВТПостоянныеКадровыеДанныеСотрудников
Если ТипЗнч(Сотрудник) <> Тип("Массив") Тогда
СписокСотрудников = Новый Массив();
СписокСотрудников.Добавить(Сотрудник);
Иначе
СписокСотрудников = Сотрудник;
КонецЕсли;
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ПараметрыПолученияРабочихМест = КадровыйУчет.ПараметрыДляЗапросВТРабочиеМестаСотрудниковПоСпискуСотрудников(СписокСотрудников, Объект.МесяцНачисления, КонецМесяца(Объект.МесяцНачисления));
ПараметрыПолученияРабочихМест.Организация = Объект.Организация;
// Получаем рабочие места сотрудников
КадровыйУчет.СоздатьВТРабочиеМестаСотрудников(Запрос.МенеджерВременныхТаблиц, Истина, ПараметрыПолученияРабочихМест);
//ВТРабочиеМестаСотрудников= Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("ВТРабочиеМестаСотрудников").ПолучитьДанные().Выгрузить();
Процедура КадровыйУчет.СоздатьВТРабочиеМестаСотрудников() возвращает таблиц значений со следующими полями:
("ВТРабочиеМестаСотрудников") | СтрокаТаблицыЗначений |
ВидДоговора | Трудовой договор |
ВидСобытия | Перемещение |
Год | 01.01.2021 0:00:00 |
ГоловнаяОрганизация | БУЗ |
ГоловнойСотрудник | Ануфриев Кирилл Сергеевич (ув.) (осн) |
ДатаНачала | 01.05.2021 0:01:01 |
ДатаОкончания | 05.06.2021 0:00:04 |
ДокументОснование | Кадровый перевод списком 00ЗП-000283 от 30.04.2021 |
Должность | Врач-стажер |
ДолжностьПоШтатномуРасписанию | Врач-стажер, 1 квалификационный уровень /Отделение для лечения пациентов больных, в том числе подозрительных на новую коронавирусную инфекцию COVID-19 |
КоличествоСтавок | 1 |
Организация | БУЗ |
Период | 01.06.2021 0:00:00 |
ПериодВозвратногоСобытия | 01.07.2021 0:00:00 |
ПериодЗаписи | 01.05.2021 0:01:01 |
Подразделение | Отделение для лечения пациентов больных, в том числе подозрительных на новую коронавирусную инфекцию COVID-19 |
ПустойИнтервал | Ложь |
РегистраторЗаписи | Кадровый перевод списком 00ЗП-000283 от 30.04.2021 |
РегистраторСобытия | Кадровый перевод списком 00ЗП-000283 от 30.04.2021 |
РольСотрудника | Работник |
Сотрудник | Ануфриев Кирилл Сергеевич (ув.) (осн) |
ФизическоеЛицо | Ануфриев Кирилл Сергеевич |
ЭтоВозвратноеСобытие | Ложь |
ЭтоГоловнойСотрудник | Истина |
//В конфигурации кадровая история получается следующим образом
//(Справочники - Сотрудники - ФормаИсторииИзмененияМестаРаботы):
&НаСервере
Процедура СформироватьКадровуюИсторию()
КадроваяИстория.Очистить();
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Измерения = Новый ТаблицаЗначений;
Измерения.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
Измерения.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
Измерения.Колонки.Добавить("ДатаОкончания", Новый ОписаниеТипов("Дата"));
СтрокаИзмерения = Измерения.Добавить();
СтрокаИзмерения.Сотрудник = СсылкаНаСотрудника;
СтрокаИзмерения.ДатаОкончания = КонецГода(ТекущаяДатаСеанса());
ПараметрыПостроения = ЗарплатаКадрыОбщиеНаборыДанных.ПараметрыПостроенияДляСоздатьВТИмяРегистра();
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
ПараметрыПостроения.Отборы, "ВидСобытия", "<>", Перечисления.ВидыКадровыхСобытий.НеподтвержденныеДанные);
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистра(
"КадроваяИсторияСотрудников",
Запрос.МенеджерВременныхТаблиц,
Истина,
ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра(Измерения),
ПараметрыПостроения);
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистра(
"ГрафикРаботыСотрудников",
Запрос.МенеджерВременныхТаблиц,
Истина,
ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра(Измерения));
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| КадроваяИсторияСотрудников.Период КАК Период
|ПОМЕСТИТЬ ВТПериоды
|ИЗ
| ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ГрафикРаботыСотрудников.Период
|ИЗ
| ВТГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| Периоды.Период КАК Период,
| МАКСИМУМ(ГрафикРаботыСотрудников.Период) КАК ПериодГрафикиРаботы,
| МАКСИМУМ(КадроваяИсторияСотрудников.Период) КАК ПериодКадроваяИстория
|ПОМЕСТИТЬ ВТПериодыИстории
|ИЗ
| ВТПериоды КАК Периоды
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
| ПО Периоды.Период >= КадроваяИсторияСотрудников.Период
| ЛЕВОЕ СОЕДИНЕНИЕ ВТГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
| ПО Периоды.Период >= ГрафикРаботыСотрудников.Период
|
|СГРУППИРОВАТЬ ПО
| Периоды.Период
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПериодыИстории.Период КАК Период,
| КадроваяИсторияСотрудников.Организация КАК Организация,
| КадроваяИсторияСотрудников.Подразделение КАК Подразделение,
| КадроваяИсторияСотрудников.Должность КАК Должность,
| КадроваяИсторияСотрудников.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| КадроваяИсторияСотрудников.КоличествоСтавок КАК КоличествоСтавок,
| КадроваяИсторияСотрудников.ВидСобытия КАК ВидСобытия,
| ГрафикРаботыСотрудников.ГрафикРаботы КАК ГрафикРаботы,
| ВЫБОР
| КОГДА ПериодыИстории.Период = ГрафикРаботыСотрудников.Период
| ТОГДА ГрафикРаботыСотрудников.Регистратор
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК РегистраторГрафикРаботы,
| ВЫБОР
| КОГДА ПериодыИстории.Период = КадроваяИсторияСотрудников.Период
| ТОГДА КадроваяИсторияСотрудников.Регистратор
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК РегистраторКадроваяИстория
|ПОМЕСТИТЬ ВТИстория
|ИЗ
| ВТПериодыИстории КАК ПериодыИстории
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
| ПО ПериодыИстории.ПериодКадроваяИстория = КадроваяИсторияСотрудников.Период
| ЛЕВОЕ СОЕДИНЕНИЕ ВТГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
| ПО ПериодыИстории.ПериодГрафикиРаботы = ГрафикРаботыСотрудников.Период
|ГДЕ
| НЕ ПериодыИстории.ПериодКадроваяИстория ЕСТЬ NULL
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| История.Период КАК Период,
| История.Организация КАК Организация,
| ВЫБОР
| КОГДА История.Организация = ИсторияПредыдущие.Организация
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ОрганизацияИзменена,
| История.Подразделение КАК Подразделение,
| ВЫБОР
| КОГДА История.Подразделение = ИсторияПредыдущие.Подразделение
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ПодразделениеИзменено,
| История.Должность КАК Должность,
| ВЫБОР
| КОГДА История.Должность = ИсторияПредыдущие.Должность
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ДолжностьИзменена,
| История.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| ВЫБОР
| КОГДА История.ДолжностьПоШтатномуРасписанию = ИсторияПредыдущие.ДолжностьПоШтатномуРасписанию
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ДолжностьПоШтатномуРасписаниюИзменена,
| История.КоличествоСтавок КАК КоличествоСтавок,
| ВЫБОР
| КОГДА История.КоличествоСтавок = ИсторияПредыдущие.КоличествоСтавок
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК КоличествоСтавокИзменено,
| История.ВидСобытия КАК ВидСобытия,
| История.ГрафикРаботы КАК ГрафикРаботы,
| ВЫБОР
| КОГДА История.ГрафикРаботы = ИсторияПредыдущие.ГрафикРаботы
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ГрафикРаботыИзменен,
| История.РегистраторГрафикРаботы КАК РегистраторГрафикРаботы,
| История.РегистраторКадроваяИстория КАК РегистраторКадроваяИстория
|ИЗ
| ВТИстория КАК История
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| История.Период КАК Период,
| МАКСИМУМ(ИсторияПредыдущая.Период) КАК ПериодПредыдущий
| ИЗ
| ВТИстория КАК История
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИстория КАК ИсторияПредыдущая
| ПО История.Период > ИсторияПредыдущая.Период
|
| СГРУППИРОВАТЬ ПО
| История.Период) КАК ПредыдущиеПериоды
| ЛЕВОЕ СОЕДИНЕНИЕ ВТИстория КАК ИсторияПредыдущие
| ПО ПредыдущиеПериоды.ПериодПредыдущий = ИсторияПредыдущие.Период
| ПО История.Период = ПредыдущиеПериоды.Период
|
|УПОРЯДОЧИТЬ ПО
| Период";
КадроваяИстория.Загрузить(Запрос.Выполнить().Выгрузить());
Для Каждого СтрокаКадроваяИстория Из КадроваяИстория Цикл
Если ЗначениеЗаполнено(СтрокаКадроваяИстория.РегистраторКадроваяИстория) Тогда
СтрокаКадроваяИстория.Основания.Добавить(СтрокаКадроваяИстория.РегистраторКадроваяИстория);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаКадроваяИстория.РегистраторГрафикРаботы)
И СтрокаКадроваяИстория.РегистраторГрафикРаботы <> СтрокаКадроваяИстория.РегистраторКадроваяИстория Тогда
СтрокаКадроваяИстория.Основания.Добавить(СтрокаКадроваяИстория.РегистраторГрафикРаботы);
КонецЕсли;
СтрокаКадроваяИстория.КоличествоСтавокПредставление = КадровыйУчетРасширенныйКлиентСервер.ПредставлениеКоличестваСтавок(СтрокаКадроваяИстория.КоличествоСтавок);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция РассчитатьСтажиСотрудниковЗанявшихПозиции(ПозицияШР, Должность, Подразделение, ДатаОтсчета, КатегорияДолжности, ОкладИндекс)
СтруктураДанных = Новый Структура();
СтруктураДанных.Вставить("ДатаНачала",);
СтруктураДанных.Вставить("ДатаОкончания",);
СтруктураДанных.Вставить("РазмерОклада",);
ПараметрыПолучения = ПолучитьПараметры();
ПараметрыПолучения.Организация = Отчет.Организация;
//Если ЗначениеЗаполнено(Подразделение) Тогда
// ПараметрыПолучения.Подразделение = Подразделение;
//КонецЕсли;
//Если ВключаяУволенныхНаНачалоПериода Тогда
// ПараметрыПолучения.ВключаяУволенныхНаНачалоПериода = Истина;
//КонецЕсли;
ПараметрыПолучения.НачалоПериода = НачалоМесяца(ДатаОтсчета);
ПараметрыПолучения.ОкончаниеПериода = КонецМесяца(ДатаОтсчета);
ПараметрыПолучения.ПодработкиРаботниковПоТрудовымДоговорам = Истина;
ПараметрыПолучения.РаботникиПоДоговорамГПХ = Ложь;
//ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
//ПараметрыПолучения.Отборы, "ДолжностьПоШтатномуРасписанию", "=", ПозицияШР);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
ПараметрыПолучения.Отборы, "Должность", "=", Должность);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
ПараметрыПолучения.Отборы, "Подразделение", "=", Подразделение);
ПараметрыПолучения.КадровыеДанные = "Сотрудник,ФизическоеЛицо,Подразделение,Должность,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ВидЗанятости,ДатаПриема,ДатаУвольнения";
ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения);
//ДанныеПозиции = УправлениеШтатнымРасписанием.ДанныеПозицииШтатногоРасписания(ПозицияШР, ДатаОтсчета, Истина);
ТаблицаСтажей = КадровыйУчетРасширенный.СведенияОСтажахСотрудников(ТаблицаСотрудников);
Возврат ТаблицаСтажей;
КонецФункции
/////////////////////////
//РАСЧЕТ СТАЖА
Процедура РасчетСтажа()
ПериодРаботыЛет = 0;
ПериодРаботыМесяцев = 0;
ПериодРаботыДней = 0;
Лет = 0;
Месяцев = 0;
Дней = 0;
КоличествоПериодов = 0;
ПредыдущаяЗапись = Неопределено;
ПредставленияНакопленного = Новый Массив;
Для Каждого Запись Из ТрудоваяДеятельностьФизическихЛиц Цикл
Продолжительность = ПродолжительностьСтажа(Запись.ДатаНачала, Запись.ДатаОкончания, Объект.ДатаПереноса);
Лет = Лет + Продолжительность.Лет;
Месяцев = Месяцев + Продолжительность.Месяцев;
Дней = Дней + Продолжительность.Дней;
КонецЦикла;
//Объединяем все рассчитанные периоды
Лет = КадровыйУчетРасширенныйКлиентСервер.ЛетПриПодсчетеСтажа(Лет, Месяцев, Дней);
Месяцев = КадровыйУчетРасширенныйКлиентСервер.МесяцевГодаПриПодсчетеСтажа(Месяцев, Дней);
Дней = КадровыйУчетРасширенныйКлиентСервер.ДнейМесяцаПриПодсчетеСтажа(Дней);
КонецПроцедуры
&НаСервере
Функция ПродолжительностьСтажа(Знач ДатаНачала, Знач ДатаОкончания, ДатаРасчетаСтажа, РазмерМесяцев = 0, РазмерДней = 1)
ДанныеСтажа = ЗарплатаКадрыРасширенныйКлиентСервер.СведенияОСтаже();
ДанныеСтажа.ДатаОтсчета = ДатаНачала;
ДанныеСтажа.Лет = Цел(РазмерМесяцев / 12);
ДанныеСтажа.РазмерМесяцев = РазмерМесяцев;
ДанныеСтажа.Месяцев = РазмерМесяцев - ДанныеСтажа.Лет * 12;
ДанныеСтажа.РазмерДней = РазмерДней;
ДанныеСтажа.Дней = РазмерДней;
Если Не ЗначениеЗаполнено(ДатаОкончания)
Или ДатаОкончания > ДатаРасчетаСтажа Тогда
ДатаОкончания = НачалоДня(ДатаРасчетаСтажа);
КонецЕсли;
Продолжительность = ЗарплатаКадрыРасширенныйКлиентСервер.ПродолжительностьСтажа(
ДанныеСтажа, ДатаОкончания);
Возврат Продолжительность;
КонецФункции
&НаСервере
Процедура УстановитьОсновногоСотрудника(ВыводитьСообщения = Истина)
Объект.ОсновнойСотрудник = КадровыйУчетРасширенный.ОсновнойСотрудникФизЛица(Объект.ФизическоеЛицо, Объект.Организация, Объект.ДатаНачала, ВыводитьСообщения);
КонецПроцедуры
ДанныеФизЛица = КадровыйУчет.ДокументыФизическихЛиц(ВыборкаСтрок.ФизическоеЛицо, Истина);
ОбластьМакетаСтрока.Параметры.Паспорт = "" + ДанныеФизЛица[0].ВидДокумента + ", "
+ ДанныеФизЛица[0].Серия + ", " + ДанныеФизЛица[0].Номер + ", выдан: " + ДанныеФизЛица[0].КемВыдан;
ИЛИ
ДанныеОбъекта.Вставить("СотрудникДокумент", РегистрыСведений.ДокументыФизическихЛиц.ДокументУдостоверяющийЛичностьФизлица(Выборка.ФизическоеЛицо, КонецДня(Выборка.Период)));
ДанныеПроизводственныхКалендарей = Новый ТаблицаЗначений;
ДанныеПроизводственныхКалендарей.Колонки.Добавить("ПроизводственныйКалендарь", Новый ОписаниеТипов("СправочникСсылка.ПроизводственныеКалендари"));
ДанныеПроизводственныхКалендарей.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
ДанныеПроизводственныхКалендарей.Колонки.Добавить("ДатаОкончания", Новый ОписаниеТипов("Дата"));
НоваяСтрокаПроизводственногоКалендаря = ДанныеПроизводственныхКалендарей.Добавить();
НоваяСтрокаПроизводственногоКалендаря.ПроизводственныйКалендарь = Справочники.ПроизводственныеКалендари.НайтиПоНаименованию("Российская Федерация");
НоваяСтрокаПроизводственногоКалендаря.ДатаНачала = ДанныеСсылок.МесяцНачисления;
НоваяСтрокаПроизводственногоКалендаря.ДатаОкончания = КонецМесяца(ДанныеСсылок.МесяцНачисления);
ДанныеПроизводственныхКалендарей = УчетРабочегоВремениРасширенный.ДанныеПроизводственныхКалендарей(ДанныеПроизводственныхКалендарей);
//Возвращается ТЗ со следующими реквизитами
//ГрафикРаботы,
//Недельный,
//СуммированныйУчетРабочегоВремени,
//Сокращенный,
//ЧасовВНеделю,
//ЧасовВДень,
//ДнейВНеделю,
//ЧасовВДеньСокращенный,
//ДнейВНеделюСокращенный
ДанныеГрафиковРаботы = КадровыйУчет.ДанныеГрафиковРаботыДляСправкиОСреднемЗаработке();
Отбор = Новый Структура();
Отбор.Вставить("ГрафикРаботы", ДанныеДетальныхЗаписей.ГрафикРаботы);
ТекущийГрафик = ДанныеГрафиковРаботы.НайтиСтроки(Отбор);
// Составляет расписания работы для дат, включенных в указанные графики на указанный период.
// Если расписание на предпраздничный день не задано, то оно определяется так, как если бы этот день был бы рабочим.
// Необходимо учитывать, что для работы этой функции обязательно наличие подсистемы ГрафикиРаботы.
//
// Параметры:
// Графики - Массив - массив элементов типа СправочникСсылка.Календари, для которых составляются расписания.
// ДатаНачала - Дата - дата начала периода, за который нужно составить расписания.
// ДатаОкончания - Дата - дата окончания периода.
//
// Возвращаемое значение:
// ТаблицаЗначений - таблица с колонками:
// * ГрафикРаботы - СправочникСсылка.Календари - график работы.
// * ДатаГрафика - Дата - дата в графике работы ГрафикРаботы.
// * ВремяНачала - Дата - время начала работы в день ДатаГрафика.
// * ВремяОкончания - Дата - время окончания работы в день ДатаГрафика.
//
Результат = КалендарныеГрафики.РасписанияРаботыНаПериод(Графики, ДатаНачала, ДатаОкончания)
// Составляет расписания работы для дат, включенных в указанные графики на указанный период.
// Если расписание на предпраздничный день не задано, то оно определяется так, как если бы этот день был бы рабочим.
// Необходимо учитывать, что для работы этой функции обязательно наличие подсистемы ГрафикиРаботы.
//
// Параметры:
// Графики - Массив - массив элементов типа СправочникСсылка.Календари, для которых составляются расписания.
// ДатаНачала - Дата - дата начала периода, за который нужно составить расписания.
// ДатаОкончания - Дата - дата окончания периода.
//
// Возвращаемое значение:
// ТаблицаЗначений - таблица с колонками:
// * ГрафикРаботы - СправочникСсылка.Календари - график работы.
// * ДатаГрафика - Дата - дата в графике работы ГрафикРаботы.
// * ВремяНачала - Дата - время начала работы в день ДатаГрафика.
// * ВремяОкончания - Дата - время окончания работы в день ДатаГрафика.
//
Результат = КалендарныеГрафики.РазностьДатПоКалендарю(ГрафикРаботы, ДатаНачала, ДатаОкончания, ВызыватьИсключение)
// Определяет для каждой даты дату ближайшего к ней рабочего дня.
//
// Параметры:
// ПроизводственныйКалендарь - СправочникСсылка.ПроизводственныеКалендари - календарь, используемый для расчета.
// НачальныеДаты - Массив Из Дата - даты, относительно которых будет выполнен поиск ближайших.
// ПараметрыПолучения - см. ПараметрыПолученияБлижайшихРабочихДат.
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение:
// * Ключ - Дата - начальная дата,
// * Значение - Дата - ближайшая к ней рабочая дата (если передана рабочая дата, то она же и возвращается).
//
Результат = КалендарныеГрафики.БлижайшиеРабочиеДаты(ПроизводственныйКалендарь, НачальныеДаты, ПараметрыПолучения = Неопределено)
// Возвращает основной производственный календарь, используемый в учете.
//
// Возвращаемое значение:
// СправочникСсылка.ПроизводственныеКалендари, Неопределено - основной производственный календарь или
// Неопределено, в случае если он не обнаружен.
//
Результат = КалендарныеГрафики.ОсновнойПроизводственныйКалендарь()
//В ДАННОМ ПРИМЕРЕ МОЖНО ПОЛУЧИТЬ ДАННЫЕ ВРЕМЕНИ ТОЛЬКО ЗА ОДИН МЕСЯЦ
&НаСервере
Процедура Команда1НаСервере()
ПараметрыПолученияДанных = УчетРабочегоВремениРасширенный.ПараметрыПолученияДанныхУчетаВремени();
ДатаНачала = '20180901';
ДатаОкончания = КонецМесяца(ДатаНачала);
ПараметрыПолученияДанных.ДатаНачала = ДатаНачала;
ПараметрыПолученияДанных.ДатаОкончания = ДатаОкончания;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
//Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
// | Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо
// |ИЗ
// | ВТСотрудники КАК Сотрудники";
//МассивСотрудников = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ФизическоеЛицо");
МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(Справочники.Сотрудники.НайтиПоНаименованию("Иванов Иван Иванович"));
СоздатьВТСотрудники(МенеджерВременныхТаблиц, МассивСотрудников, ДатаНачала);
УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаРабочегоВремениСотрудников(МенеджерВременныхТаблиц, Истина, ПараметрыПолученияДанных);
//Колонка "План" говорит о наличии введенного документа Табель, если значение Ложь значит создан документ Табель.
ДанныеТабеляТ13 = МенеджерВременныхТаблиц.Таблицы.Найти("ВТДанныеУчетаРабочегоВремениСотрудников").ПолучитьДанные().Выгрузить();
НормаПоГрафику = МенеджерВременныхТаблиц.Таблицы.Найти("ВТНормаВремени").ПолучитьДанные().Выгрузить();
КонецПроцедуры
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СоздатьВТСотрудники(МенеджерВременныхТаблиц, МассивСотрудников, Месяц, ДатаАктуальности = Неопределено, ДатаНачала = Неопределено, ДатаОкончания = Неопределено)
ТаблицаСотрудники = Новый ТаблицаЗначений;
ТаблицаСотрудники.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ТаблицаСотрудники.Колонки.Добавить("Месяц", Новый ОписаниеТипов("Дата"));
ТаблицаСотрудники.Колонки.Добавить("ДатаАктуальности", Новый ОписаниеТипов("Дата"));
ТаблицаСотрудники.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
ТаблицаСотрудники.Колонки.Добавить("ДатаОкончания", Новый ОписаниеТипов("Дата"));
Для Каждого Сотрудник Из МассивСотрудников Цикл
СтрокаСотрудники = ТаблицаСотрудники.Добавить();
СтрокаСотрудники.Сотрудник = Сотрудник;
КонецЦикла;
ТаблицаСотрудники.ЗаполнитьЗначения(Месяц, "Месяц");
ТаблицаСотрудники.ЗаполнитьЗначения(?(ДатаАктуальности = Неопределено, ТекущаяДата(), ДатаАктуальности), "ДатаАктуальности");
ТаблицаСотрудники.ЗаполнитьЗначения(?(ДатаНачала = Неопределено, Месяц, ДатаНачала), "ДатаНачала");
ТаблицаСотрудники.ЗаполнитьЗначения(?(ДатаОкончания = Неопределено, КонецМесяца(Месяц), ДатаОкончания), "ДатаОкончания");
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТаблицаСотрудники.Сотрудник,
| ТаблицаСотрудники.Месяц,
| ТаблицаСотрудники.ДатаАктуальности,
| ТаблицаСотрудники.ДатаНачала,
| ТаблицаСотрудники.ДатаОкончания
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| &ТаблицаСотрудники КАК ТаблицаСотрудники");
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТаблицаСотрудники", ТаблицаСотрудники);
Запрос.Выполнить();
КонецПроцедуры
&НаСервере
Процедура ПолучитьДанныеСреднегоЗаработкаНаСервере()
ДатаОтпуска = Дата(2018,01,01);
//Расчетный год отпуска
ДатаНачала = Дата(2017,01,01);
ДатаОкончания = Дата(2017,12,31);
ИсходнаяТаблица = УчетСреднегоЗаработка.ПустаяТаблицаИсходныхДанныхРасчетаОбщегоСреднегоЗаработка();
мПараметры = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
мПараметры.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "0000000000");
мПараметры.НачалоПериода = ДатаОтпуска;
мПараметры.ОкончаниеПериода = ДатаОтпуска;
//мПараметры.КадровыеДанные = "Подразделение";
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
мПараметры.Отборы, "ФизическоеЛицо", "=", Справочники.ФизическиеЛица.НайтиПоНаименованию("Иванов Иван Иванович"));
// 1. получаем сотрудников организации
СотрудникиОрганизации = КадровыйУчет.СотрудникиОрганизации(Истина, мПараметры);
// 2. получаем средний заработок сотрудников
СотрудникиОрганизации.Колонки.Добавить("СреднийЗаработок", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));
СотрудникиОрганизации.Колонки.Добавить("ОстатокОтпуска", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(4, 0)));
СотрудникиОрганизации.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));
ОграничитьКоличество = 10;
// получем данные для расчета среднего
СтрокиКУдалению = Новый Массив;
Индекс = 1;
Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл
Если Индекс <= ОграничитьКоличество Тогда
СтрокаТаблицы = ИсходнаяТаблица.Добавить();
СтрокаТаблицы.Сотрудник = СтрокаСотрудник.Сотрудник;
СтрокаТаблицы.ПорядокРасчета = Перечисления.ПорядокРасчетаСреднегоЗаработкаОбщий.Постановление2010;
СтрокаТаблицы.ДатаНачалаСобытия = ДатаОтпуска;
СтрокаТаблицы.НачалоПериодаРасчетаСреднего = ДатаНачала;
СтрокаТаблицы.ОкончаниеПериодаРасчетаСреднего = ДатаОкончания;
Индекс = Индекс + 1;
Иначе
СтрокиКУдалению.Добавить(СтрокаСотрудник);
КонецЕсли;
КонецЦикла;
Для каждого пСтрока из СтрокиКУдалению Цикл
СотрудникиОрганизации.Удалить(пСтрока);
КонецЦикла;
ДанныеДляРасчета = УчетСреднегоЗаработка.ДанныеДляРасчетаОбщегоСреднегоЗаработкаСотрудников(ИсходнаяТаблица, Неопределено, Неопределено, Истина);
Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл
Отбор = Новый Структура("Сотрудник",СтрокаСотрудник.Сотрудник);
ДанныеОВремени = ДанныеДляРасчета.ДанныеОВремени;
ДанныеОНачислениях = ДанныеДляРасчета.ДанныеОНачислениях;
ДанныеОбИндексации = ДанныеДляРасчета.ДанныеОбИндексации;
ДанныеДляРасчетаСотрудник = Новый Структура("ДанныеОВремени,ДанныеОНачислениях,ДанныеОбИндексации");
ДанныеДляРасчетаСотрудник.ДанныеОВремени = ДанныеОВремени.Скопировать(ДанныеОВремени.НайтиСтроки(Отбор));
ДанныеДляРасчетаСотрудник.ДанныеОНачислениях = ДанныеОНачислениях.Скопировать(ДанныеОНачислениях.НайтиСтроки(Отбор));
ДанныеДляРасчетаСотрудник.ДанныеОбИндексации = ДанныеОбИндексации.Скопировать(ДанныеОбИндексации.НайтиСтроки(Отбор));
ДополнительныеПараметры = УчетСреднегоЗаработкаКлиентСервер.ДополнительныеПараметрыРасчетаСреднегоЗаработка();
ДополнительныеПараметры.ДатаНачалаСобытия = ДатаОтпуска;
Если Не ЗначениеЗаполнено(ДополнительныеПараметры.НачалоПериода)
Или Не ЗначениеЗаполнено(ДополнительныеПараметры.ОкончаниеПериода) Тогда
ПериодРасчета = УчетСреднегоЗаработка.ПериодРасчетаОбщегоСреднегоЗаработкаСотрудника(ДатаОтпуска, СтрокаСотрудник.Сотрудник, ДополнительныеПараметры.Начисление);
ДополнительныеПараметры.НачалоПериода = ДатаНачала;
ДополнительныеПараметры.ОкончаниеПериода = ДатаОкончания;
КонецЕсли;
Если ДополнительныеПараметры.ПорядокРасчета = Неопределено Тогда
ДополнительныеПараметры.ПорядокРасчета = УчетСреднегоЗаработкаКлиентСервер.ПорядокРасчетаОбщегоСреднегоЗаработка(ДатаОтпуска);
КонецЕсли;
ДополнительныеПараметры.ПорядокРасчета = Перечисления.ПорядокРасчетаСреднегоЗаработкаОбщий.Постановление2010;
ДополнительныеПараметры.СпособРасчетаОтпуска = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоКалендарнымДням;
ДополнительныеПараметры.Индексации = ДанныеДляРасчетаСотрудник.ДанныеОбИндексации;
СтрокаСотрудник.СреднийЗаработок = УчетСреднегоЗаработкаКлиентСервер.СреднийЗаработокОбщий(ДанныеДляРасчетаСотрудник.ДанныеОНачислениях, ДанныеДляРасчетаСотрудник.ДанныеОВремени, ДополнительныеПараметры);
КонецЦикла;
// 3. считаем остатки отпусков
СписокСотрудников = СотрудникиОрганизации.ВыгрузитьКолонку("Сотрудник");
ВидыОтпусков = Неопределено;
//ВидыОтпусков = Новый Массив;
//ВидыОтпусков.Добавить(Справочники.ВидыОтпусков.Основной);
ТаблицаОстаткиОтпусков = ОстаткиОтпусков.ОстаткиОтпусковСотрудниковНаДату(СписокСотрудников, ДатаОтпуска, ВидыОтпусков);
Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл
Отбор = Новый Структура("Сотрудник",СтрокаСотрудник.Сотрудник);
СтрокиОтпуска = ТаблицаОстаткиОтпусков.НайтиСтроки(Отбор);
ОстатокОтпуска = 0;
Для каждого СтрокаОтпуска из СтрокиОтпуска Цикл
ОстатокОтпуска = ОстатокОтпуска + СтрокаОтпуска.КоличествоДней;
КонецЦикла;
СтрокаСотрудник.ОстатокОтпуска = ОстатокОтпуска;
СтрокаСотрудник.Сумма = ОстатокОтпуска * СтрокаСотрудник.СреднийЗаработок;
КонецЦикла;
//СотрудникиОрганизации.Колонки.Добавить("СреднийЗаработок",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 2)));
//Сообщить(УчетСреднегоЗаработка.СреднийЗаработок(СотрудникиОрганизации[0].Сотрудник,Дата(2017,12,31)));
//ЗаполнитьТаблицуЗначенийНаФорме(СотрудникиОрганизации,"ТЗ2");
КонецПроцедуры
//Получить денежное содержание сотрудников
//Получение реквизита СотрудникиОрганизации см. Получение среднего заработка
СписокСотрудниковДС = СотрудникиОрганизации.ВыгрузитьКолонку("Сотрудник");
СохраняемыйЗаработок = Новый Соответствие;
СтруктураОбъекта = РасчетДенежногоСодержания.ПодготовитьСтруктуруОбъектаДляРасчетаРезервовОтпусков(СписокСотрудниковДС, ПараметрОрганизация, ПараметрДатаФормирования);
РасчетДенежногоСодержания.ОбновитьДанныеСохраняемогоДенежногоСодержанияДокумента(СтруктураОбъекта);
СтруктураОбъекта.Вставить("ДанныеОНачислениях", СтруктураОбъекта.ДенежноеСодержание);
СтруктураОбъекта.Вставить("ДанныеОФактическихНачислениях", СтруктураОбъекта.ДенежноеСодержаниеФактическиеНачисления);
СтруктураОбъекта.Удалить("ДенежноеСодержание");
СтруктураОбъекта.Удалить("ДенежноеСодержаниеФактическиеНачисления");
ЧастиДенежногоСодержания = РасчетДенежногоСодержания.РассчитатьСохраняемоеДенежноеСодержание(СтруктураОбъекта, Истина);
СохраняемыйЗаработок = ЧастиДенежногоСодержания.СохраняемоеДенежноеСодержание;
КоличествоДней = 0;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СреднемесячноеКоличествоДнейДляОплатыОтпусковГосслужащихСрезПоследних.КоличествоДней КАК КоличествоДней
|ИЗ
| РегистрСведений.СреднемесячноеКоличествоДнейДляОплатыОтпусковГосслужащих.СрезПоследних КАК СреднемесячноеКоличествоДнейДляОплатыОтпусковГосслужащихСрезПоследних";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Количество() > 0 Тогда
Выборка.Следующий();
КоличествоДней = Выборка.КоличествоДней;
КонецЕсли;
КоличествоДнейВМесяце = ?(КоличествоДней = 0, 29.3, КоличествоДней);
ДанныеДенежногоСодержания = Новый ТаблицаЗначений();
ДанныеДенежногоСодержания.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ДанныеДенежногоСодержания.Колонки.Добавить("ДенежноеСодержание", Новый ОписаниеТипов("Число"));
Для каждого ЭлементКоллекции Из СохраняемыйЗаработок Цикл
НоваяСтрокаДС = ДанныеДенежногоСодержания.Добавить();
НоваяСтрокаДС.Сотрудник = ЭлементКоллекции.Ключ;
НоваяСтрокаДС.ДенежноеСодержание = Окр(ЭлементКоллекции.Значение/КоличествоДнейВМесяце,2);
КонецЦикла;
&НаСервере
Процедура ОтражениеВУчетеНаСервере()
//Тестировалось на релизе 3.1.8
Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("Колесник Дмитрий Иванович");
ДатаНачалаСобытия = ДАТА(2018,12,14);
Начисление = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оплата по окладу");
// Определяет статью финансирования, используемую для СОТРУДНИКА по умолчанию.
ОтражениеВБухучетеНачисления = УчетСреднегоЗаработка.ОтражениеВБухучетеПоУмолчанию(Сотрудник, ДатаНачалаСобытия, Начисление);
// Определяет статью финансирования, используемую для НАЧИСЛЕНИЯ СОТРУДНИКА по умолчанию.
ОтражениеВБухучетеСотрудника = УчетСреднегоЗаработка.ОтражениеВБухучетеПоУмолчанию(Сотрудник, ДатаНачалаСобытия);
//ОтражениеВБухучетеСотрудника2 = ОтражениеЗарплатыВБухучетеРасширенный.НастройкаБухучетаЗарплатыСотрудника(Сотрудник, ДатаНачалаСобытия);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//ВАРИАНТ 1
// Определяет статью финансирования, используемую для НАЧИСЛЕНИЯ СОТРУДНИКА по умолчанию.
// Определяет откуда применяется статья финансирования (из Организации, Подразделения, Сотрудника)
// и выводит статью финансирования с учетом всех введенных данных
КадровыеДанныеСотрудника = КадровыйУчет.КадровыеДанныеСотрудников(Истина,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудник),
"Организация,ФизическоеЛицо,Подразделение,ТерриторияВыполненияРаботВОрганизации", ДатаНачалаСобытия);
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаСотрудников.Сотрудник КАК Сотрудник,
| ТаблицаСотрудников.Период КАК Период,
| ТаблицаСотрудников.Подразделение КАК Подразделение,
| ТаблицаСотрудников.ТерриторияВыполненияРаботВОрганизации КАК ТерриторияВыполненияРаботВОрганизации
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| &ТаблицаСотрудников КАК ТаблицаСотрудников";
Запрос.УстановитьПараметр("ТаблицаСотрудников", КадровыеДанныеСотрудника);
Запрос.Выполнить();
ОтражениеЗарплатыВБухучете.СоздатьВТСведенияОБухучетеЗарплатыСотрудников(МенеджерВременныхТаблиц, "ВТСотрудники", "Сотрудник,Период", КадровыеДанныеСотрудника[0].Организация);
ОтражениеВБухучетеСотрудникаПодробно = МенеджерВременныхТаблиц.Таблицы.Найти("ВТСведенияОБухучетеЗарплатыСотрудников").ПолучитьДанные().Выгрузить();
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//ВАРИАНТ 2
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Сотрудники.Ссылка КАК Сотрудник,
| &ДатаАктуальности КАК Период
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка = &Сотрудник";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
Запрос.УстановитьПараметр("ДатаАктуальности", ДатаНачалаСобытия);
Запрос.Выполнить();
// Из кадрового учета получаем организацию и подразделение.
Описатель = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(МенеджерВременныхТаблиц, "ВТСотрудники");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(Описатель, Истина, "Организация,Подразделение,ТерриторияВыполненияРаботВОрганизации");
Отборы = Новый Массив;
ОтборыНачислений = Новый Структура("ПлановыеНачисления", ОбщегоНазначенияКлиентСервер.СкопироватьМассив(Отборы));
ЗапросВТПлановыеНачисления = КадровыйУчетРасширенный.ЗапросВТПлановыеНачисленияСотрудников(
Истина, "ВТПлановыеНачисленияСотрудников", "ВТСотрудники", "Сотрудник,Период",ОтборыНачислений,Истина);
ЗапросВТПлановыеНачисления.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ЗапросВТПлановыеНачисления.Выполнить();
// Формируем временную таблицу с настройками бухучета.
//Если Начисление <> Неопределено Тогда
ОтражениеЗарплатыВБухучете.СоздатьВТСведенияОБухучетеНачисленийСотрудников(МенеджерВременныхТаблиц, "ВТКадровыеДанныеСотрудников", "Сотрудник,Период", , , Начисление);
//ИмяВТ = "ВТСведенияОБухучетеНачисленийСотрудников";
//Иначе
ОтражениеЗарплатыВБухучетеРасширенный.СоздатьВТСведенияОБухучетеЗарплатыСотрудников(МенеджерВременныхТаблиц, "ВТКадровыеДанныеСотрудников", "Сотрудник,Период");
//ИмяВТ = "ВТСведенияОБухучетеЗарплатыСотрудников";
//КонецЕсли;
ОтражениеВБухучетеНачисленийСотрудникаПодробно = МенеджерВременныхТаблиц.Таблицы.Найти("ВТСведенияОБухучетеНачисленийСотрудников").ПолучитьДанные().Выгрузить();
ОтражениеВБухучетеСотрудникаПодробно = МенеджерВременныхТаблиц.Таблицы.Найти("ВТСведенияОБухучетеЗарплатыСотрудников").ПолучитьДанные().Выгрузить();
ВТПлановыеНачисленияСотрудников = МенеджерВременныхТаблиц.Таблицы.Найти("ВТПлановыеНачисленияСотрудников").ПолучитьДанные().Выгрузить();
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьДанныеНачислений(Команда)
ПолучитьДанныеНачисленийНаСервере(Сотрудники.ВыгрузитьЗначения(), ПериодНачисления.ДатаНачала, ПериодНачисления.ДатаОкончания, Организация)
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПолучитьДанныеНачисленийНаСервере(МассивСотрудников, ДатаНачала, ДатаОкончания, Организация)
ДополнительныеПараметры = РасчетЗарплатыРасширенный.ДополнительныеПараметрыЗаполненияТаблицДокумента();
ДополнительныеПараметры.Сотрудники = МассивСотрудников;
ДополнительныеПараметры.ОкончаниеПериода = ДатаОкончания;
ДополнительныеПараметры.РежимНачисления = Перечисления.РежимНачисленияЗарплаты.ОкончательныйРасчет;
ПараметрыОписания = Новый Структура;
ПараметрыОписания.Вставить("ИзменениеБезОграничений" ,Истина);
ПараметрыОписания.Вставить("РегистрацияНачисленийДоступна", Истина);
ПараметрыОписания.Вставить("СпособыРасчетаСреднегоЗаработка", Неопределено);
ПараметрыОписания.Вставить("ПризнакКомпенсацииУдержанияОтпуска", Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.НеИспользовать);
ОписаниеДокумента = КадровыйУчетРасширенныйКлиентСервер.ОписаниеДокумента(ПараметрыОписания);
ДанныеНачислений = РасчетЗарплатыРасширенный.ДанныеДляЗаполненияТаблицДокумента(ОписаниеДокумента, Организация, ДатаНачала, ДополнительныеПараметры);
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ТекущаяДата = ТекущаяДата();
ПериодНачисления.ДатаНачала = НачалоМесяца(ТекущаяДата);
ПериодНачисления.ДатаОкончания = КонецМесяца(ТекущаяДата);
КонецПроцедуры
СПАСИБО ЗА КОД SlavaKron
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
&НаСервере
Процедура Команда1НаСервере()
ПараметрыОтчета = Новый Структура();
ПараметрыОтчета.Вставить("Организации", Неопределено);
ПараметрыОтчета.Вставить("ЗаполняетсяВЦеломПоОрганизации", Истина);
ПараметрыОтчета.Вставить("ЗаполняетсяПоКаждомуОП", Истина);
ПараметрыОтчета.Вставить("Организация", Объект.Организация);
ПараметрыОтчета.Вставить("ДатаНачалаПериодаОтчета", Объект.Период.ДатаНачала);
ПараметрыОтчета.Вставить("ДатаКонцаПериодаОтчета", Объект.Период.ДатаОкончания);
ПараметрыОтчета.Вставить("ОбособленноеПодразделение", Неопределено);
ПараметрыОтчета.Вставить("ИсключитьДанныеОбособленныхПодразделений", Ложь);
ПараметрыОтчета.Вставить("АдресВременногоХранилищаРасшифровки"); // Адрес временного хранилища, где размещена расшифровка результата автозаполнения.
ТаблицаДанныхОтчета = Новый ТаблицаЗначений;
ТаблицаДанныхОтчета.Колонки.Добавить("КатегорияПерсонала", Новый ОписаниеТипов("СправочникСсылка.СтрокиОтчетностиМониторингаРаботниковСоциальнойСферы"));
ТаблицаДанныхОтчета.Колонки.Добавить("Должность", Новый ОписаниеТипов("СправочникСсылка.Должности"));
ТаблицаДанныхОтчета.Колонки.Добавить("СредняяЧисленностьЗаПериодСписочногоСостава", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОтчета.Колонки.Добавить("СредняяЧисленностьЗаПериодВнешнихСовместителей", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОтчета.Колонки.Добавить("ФОТВнутреннихСовместителей", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОтчета.Колонки.Добавить("ФОТСписочногоСоставаБюджет", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОтчета.Колонки.Добавить("ФОТСписочногоСоставаОМС", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОтчета.Колонки.Добавить("ФОТСписочногоСоставаДоход", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОтчета.Колонки.Добавить("ФОТВнешнихСовместителейБюджет", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОтчета.Колонки.Добавить("ФОТВнешнихСовместителейОМС", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОтчета.Колонки.Добавить("ФОТВнешнихСовместителейДоход", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОтчета.Колонки.Добавить("ФОТСписочногоСостава", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОтчета.Колонки.Добавить("ФОТВнешнихСовместителей", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОтчета.Колонки.Добавить("ФОТСписочногоСоставаБюджетЗаКлассноеРуководство", Новый ОписаниеТипов("Число"));
// Расширение структуры настроек.
ПараметрыОтчетаДляЗаполнения = СтатистикаПерсоналаРасширенный.СкопироватьКоллекцию(ПараметрыОтчета);
ДанныеОтчета = Новый ДеревоЗначений;
ДанныеДляЗаполненияРегламентированнойОтчетностиЗарплата("РегламентированныйОтчетСтатистикаФормаЗП", ПараметрыОтчетаДляЗаполнения, ДанныеОтчета);
СтрокаОрганизации = ДанныеОтчета.Строки.Найти(ПараметрыОтчетаДляЗаполнения.Организация, "Организация");
Если СтрокаОрганизации = Неопределено Тогда
//Возврат ТаблицаДанныхОтчета;
КонецЕсли;
// Заполнение таблицы данных отчета.
Для Каждого СтрокаОтчета Из СтрокаОрганизации.Строки Цикл
НоваяСтрока = ТаблицаДанныхОтчета.Добавить();
НоваяСтрока.КатегорияПерсонала = СтрокаОтчета.СтрокаОтчетностиМониторингаРаботниковСоциальнойСферы;
//Если ВариантРасчетаПоказателей >= 2015 Тогда
НоваяСтрока.ФОТВнутреннихСовместителей = Окр((СтрокаОтчета.НачисленоВнутреннимСовместителям + СтрокаОтчета.НачисленоРаботникамСписочногоСоставаПоСовмещению) / 1000, 1);
//Иначе
// НоваяСтрока.ФОТВнутреннихСовместителей = Окр(СтрокаОтчета.НачисленоВнутреннимСовместителям / 1000, 1);
//КонецЕсли;
НоваяСтрока.ФОТСписочногоСоставаБюджет = Окр(СтрокаОтчета.ФОТСписочногоСоставаБюджет / 1000, 1);
НоваяСтрока.ФОТСписочногоСоставаОМС = Окр(СтрокаОтчета.ФОТСписочногоСоставаОМС / 1000, 1);
НоваяСтрока.ФОТСписочногоСоставаДоход = Окр(СтрокаОтчета.ФОТСписочногоСоставаДоход / 1000, 1);
НоваяСтрока.ФОТВнешнихСовместителейБюджет = Окр(СтрокаОтчета.ФОТВнешнихСовместителейБюджет / 1000, 1);
НоваяСтрока.ФОТВнешнихСовместителейОМС = Окр(СтрокаОтчета.ФОТВнешнихСовместителейОМС / 1000, 1);
НоваяСтрока.ФОТВнешнихСовместителейДоход = Окр(СтрокаОтчета.ФОТВнешнихСовместителейДоход / 1000, 1);
НоваяСтрока.ФОТСписочногоСостава = Окр(СтрокаОтчета.ФОТСписочногоСостава / 1000, 1);
НоваяСтрока.ФОТВнешнихСовместителей = Окр(СтрокаОтчета.ФОТВнешнихСовместителей / 1000, 1);
НоваяСтрока.ФОТСписочногоСоставаБюджетЗаКлассноеРуководство = Окр(СтрокаОтчета.ФОТСписочногоСоставаБюджетЗаКлассноеРуководство / 1000, 1);
КонецЦикла;
ДанныеОтчета = Новый ДеревоЗначений;
ДанныеДляЗаполненияРегламентированнойОтчетностиКадры("РегламентированныйОтчетСтатистикаФормаЗП", ПараметрыОтчетаДляЗаполнения, ДанныеОтчета);
СтрокаОрганизации = ДанныеОтчета.Строки.Найти(ПараметрыОтчетаДляЗаполнения.Организация, "Организация");
Если СтрокаОрганизации = Неопределено Тогда
//Возврат ТаблицаДанныхОтчета;
КонецЕсли;
// Заполнение таблицы данных отчета.
Для Каждого СтрокаОтчета Из СтрокаОрганизации.Строки Цикл
НоваяСтрока = ТаблицаДанныхОтчета.Найти(СтрокаОтчета.СтрокаОтчетностиМониторингаРаботниковСоциальнойСферы, "КатегорияПерсонала");
Если НоваяСтрока = Неопределено Тогда
НоваяСтрока = ТаблицаДанныхОтчета.Добавить();
КонецЕсли;
НоваяСтрока.КатегорияПерсонала = СтрокаОтчета.СтрокаОтчетностиМониторингаРаботниковСоциальнойСферы;
НоваяСтрока.СредняяЧисленностьЗаПериодСписочногоСостава = Окр(Окр(СтрокаОтчета.СредняяЧисленностьЗаПериодСписочногоСостава, 2), 1);
НоваяСтрока.СредняяЧисленностьЗаПериодВнешнихСовместителей = Окр(Окр(СтрокаОтчета.СредняяЧисленностьЗаПериодВнешнихСовместителей, 2), 1);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ДанныеДляЗаполненияРегламентированнойОтчетностиКадры(Вариант, ПараметрыОтчета, ДанныеОтчета, СоответствиеПользовательскихПолей = Неопределено)
УстановитьПривилегированныйРежим(Истина);
СхемаКомпоновки = СКДОтчетаСтатистикаПерсонала("СхемаКомпоновкиДанныхКадры");
ПараметрыОтчета.Вставить("Вариант", Вариант);
Если Вариант = "РегламентированныйОтчетСтатистикаФормаП4"
Или Вариант = "РегламентированныйОтчетСтатистикаФорма1ТПроф"
Или Вариант = "РегламентированныйОтчетСтатистикаФормаЗП"
Или Вариант = "СреднесписочнаяЧисленностьПоГоловнойОрганизации"
Или Вариант = "СреднесписочнаяЧисленностьПоОрганизации"
Или Вариант = "РегламентированныйОтчетСтатистикаФорма57Т" Тогда
ПараметрыОтчета.Вставить("ИсключатьВоенных", Истина);
КонецЕсли;
Если ПараметрыОтчета.Свойство("ОплачиваемыеНерабочиеДни") Тогда
ПараметрыОтчета.Удалить("ОплачиваемыеНерабочиеДни");
КонецЕсли;
Если ПараметрыОтчета.Свойство("ЕстьНерабочиеПериоды") Тогда
ПараметрыОтчета.Удалить("ЕстьНерабочиеПериоды");
КонецЕсли;
ПараметрыОтчета.Вставить("ЧисленностьПоОтработанномуВремени", ПолучитьФункциональнуюОпцию("РассчитыватьЧисленностьПоОтработанномуВремени"));
НастройкиОтчета = СтатистикаПерсоналаРасширенный.ЗаполнитьКомпоновщикНастроек(Вариант, ПараметрыОтчета, СхемаКомпоновки);
СоответствиеПользовательскихПолей = ЗарплатаКадрыОтчеты.СоответствиеПользовательскихПолей(НастройкиОтчета);
// Запрос данных
МакетКомпоновки = ЗарплатаКадрыОтчеты.МакетКомпоновкиДанныхДляКоллекцииЗначений(СхемаКомпоновки, НастройкиОтчета);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , , Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ДанныеОтчета);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
&НаСервере
Процедура ДанныеДляЗаполненияРегламентированнойОтчетностиЗарплата(Вариант, ПараметрыОтчета, ДанныеОтчета, СоответствиеПользовательскихПолей = Неопределено)
СхемаКомпоновки = СКДОтчетаСтатистикаПерсонала("СхемаКомпоновкиДанныхЗарплата");
ПараметрыОтчета.Вставить("Вариант", Вариант);
ПараметрыОтчета.Вставить("ГоловнаяОрганизация", ЗарплатаКадры.ГоловнаяОрганизация(ПараметрыОтчета.Организация));
Если Вариант = "РегламентированныйОтчетСтатистикаФормаП4" Тогда
Если НачалоМесяца(ПараметрыОтчета.ДатаКонцаПериодаОтчета) <> ПараметрыОтчета.ДатаНачалаПериодаОтчета Тогда
ПараметрыОтчета.Вставить("СНачалаГода", Истина);
КонецЕсли;
ПараметрыОтчета.Вставить("ИсключатьВоенных", Истина);
ИначеЕсли Вариант = "РегламентированныйОтчетСтатистикаФормаЗП" Тогда
ПараметрыОтчета.Вставить("СНачалаГода", Истина);
ПараметрыОтчета.Вставить("ИсключатьВоенных", Истина);
ИначеЕсли Вариант = "СхемаКомпоновкиДанныхЗарплата1ТГМС" Тогда
ПараметрыОтчета.Вставить("СНачалаГода", Истина)
ИначеЕсли Вариант = "РегламентированныйОтчетСтатистикаФорма57Т" Тогда
ПараметрыОтчета.Вставить("ИсключатьВоенных", Истина);
КонецЕсли;
НерабочиеПериоды = КалендарныеГрафики.ПериодыНерабочихДней(КалендарныеГрафики.ОсновнойПроизводственныйКалендарь(),
Новый СтандартныйПериод (НачалоГода(ПараметрыОтчета.ДатаНачалаПериодаОтчета), ПараметрыОтчета.ДатаКонцаПериодаОтчета));
ЕстьНерабочиеПериоды = НерабочиеПериоды.Количество() <> 0;
Если ЕстьНерабочиеПериоды Тогда
ПараметрыОтчета.Вставить("ОплачиваемыеНерабочиеДни", ОбщегоНазначения.ПредопределенныйЭлемент(
"Справочник.ВидыИспользованияРабочегоВремени.ОплачиваемыеНерабочиеДни"));
КонецЕсли;
ПараметрыОтчета.Вставить("ЕстьНерабочиеПериоды", ЕстьНерабочиеПериоды);
НастройкиОтчета = СтатистикаПерсоналаРасширенный.ЗаполнитьКомпоновщикНастроек(Вариант, ПараметрыОтчета, СхемаКомпоновки);
СоответствиеПользовательскихПолей = ЗарплатаКадрыОтчеты.СоответствиеПользовательскихПолей(НастройкиОтчета);
МакетКомпоновки = ЗарплатаКадрыОтчеты.МакетКомпоновкиДанныхДляКоллекцииЗначений(СхемаКомпоновки, НастройкиОтчета);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , , Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ДанныеОтчета);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
&НаСервере
Функция СКДОтчетаСтатистикаПерсонала(ВидСКД)
ОтчетОбъект = РеквизитФормыВЗначение("Объект");
СхемаКомпоновки = ОтчетОбъект.ПолучитьМакет(ВидСКД);
Если ВидСКД <> "СхемаКомпоновкиДанныхФормаП4НЗ" Тогда
Отчеты.СтатистикаПерсонала.ПередЗаполнениемОбщихИсточниковДанныхОтчета(СхемаКомпоновки.НаборыДанных);
ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(Новый Структура("СхемаКомпоновкиДанных", СхемаКомпоновки), , Ложь);
СтатистикаПерсоналаРасширенный.УдалитьКлючевоеСловоРазрешенные(СхемаКомпоновки);
КонецЕсли;
Возврат СхемаКомпоновки;
КонецФункции
СПАСИБО ЗА КОД SlavaKron
ДанныеПечати.ФИОРуководителяСокращенное = ФизическиеЛицаЗарплатаКадры.РасшифровкаПодписи(ДанныеФИО);
ДанныеПечати.ФИОРуководителяСокращенное = ФизическиеЛицаЗарплатаКадрыКлиентСервер.ФамилияИнициалы(ДанныеДляПечатиСотрудники.ФизическоеЛицо)
РезультатСклонения = "";
Если ФизическиеЛицаЗарплатаКадры.Просклонять(Строка(Руководитель), 3, РезультатСклонения, Руководитель.Пол) Тогда
Шапка.Параметры.ФИОРуководителя = РезультатСклонения
КонецЕсли;
ИЛИ
//ФИО полные (в винительном падеже)
ОбластьСтроки.Параметры.ФИОПолные = ЗарплатаКадрыОтчеты.ПросклоненныеФИО(ВыборкаДетальныеЗаписи.ФИОПолные, 4, ВыборкаДетальныеЗаписи.Сотрудник.ФизическоеЛицо.Пол);
// Функция определяет пол физлица по его отчеству.
// Параметр:
// ОтчествоРаботника - отчество работника.
//
Пол = СотрудникиКлиентСервер.ОпределитьПолПоОтчеству(Строка.SecondName);
// Формирует инициалы имени и отчества физического лица.
//
// Параметры:
// Имя - Строка;
// Отчество - Строка;
//
// Возвращаемое значение:
// Строка - инициал имени, отчества.
//
Инициалы = ФизическиеЛицаЗарплатаКадрыКлиентСервер.ИнициалыПоИмениОтчеству(Спр.Имя, Спр.Отчество);
ОбластьПриказ.Параметры.Должность = СклонениеПредставленийОбъектов.ПросклонятьПредставление(Строка(ОбластьПриказ.Параметры.Должность), 3);
!!! Работает при включенной настройке "Склонение представлений объектов".
Обращение происходить к Веб-сервису "Морфер".
В бесплатном режиме есть ограничения.
Пример склонение фразы "календарных дней" в зависимости от числа:
КоличествоДней = СтрокаТЧ.КоличествоДней;
ПредставлениеДней = СокрЛП(СтрЗаменить(ЧислоПрописью(КоличествоДней, , "календарный,календарных,календарных,м,,,,,0"), ЧислоПрописью(КоличествоДней, , ",,,,,,,,0"), "")) + " " + СокрЛП(СтрЗаменить(ЧислоПрописью(КоличествоДней, , "день,дня,дней,м,,,,,0"), ЧислоПрописью(КоличествоДней, , ",,,,,,,,0"), ""));
ОбластьМакетаШапка.Параметры.ТекстКалендарныхДней = " " + ПредставлениеДней;
// Еще один вариант
// возвращает "8 календарных дней"
Функция ФормаМножественногоЧислаДней(КоличествоДней)
// Функция преобразует строку к множественному числу
//
// Параметры:
// Слово1 - форма слова в ед числе ("шкаф")
// Слово2 - форма слова для числит 2-4 ("шкафа")
// Слово3 - форма слова для числит 5-10 ("шкафов")
// ЦелоеЧисло - целое число.
//
// Возвращаемое значение:
// строку - одну из строк в зависимости от параметра ЦелоеЧисло.
//
// Описание:
// Предназначена для формирования "правильной" подписи к числительным.
//
Возврат "" + КоличествоДней + ПерсонифицированныйУчет.ФормаМножественногоЧисла(НСтр("ru = ' календарный день'"), НСтр("ru = ' календарных дня'"), НСтр("ru = ' календарных дней'"), КоличествоДней);
КонецФункции
Пример. Платформенный метод. Склонение словосочетаний с числительными.
Позволяющая склонять словосочетания с числительным, предусмотрена в «1С:Предприятие» версии 8.3.14.
Результат = ПолучитьСклоненияСтроки("токарь третьего разряда",
,
"ПД=Дательный");
// Результат - массив со строкой "токарю третьего разряда".
Результат = ПолучитьСклоненияСтроки("А. Грин",
"ПЛ=Мужской",
"ПД=Дательный");
// Результат - массив со строкой "А. Грину".
// Удаляет префикс информационной базы и префикс организации из переданной строки НомерОбъекта.
// Переменная НомерОбъекта должна соответствовать шаблону: ООГГ-ХХХ...ХХ или ГГ-ХХХ...ХХ, где:
// ОО - префикс организации;
// ГГ - префикс информационной базы;
// "-" - разделитель;
// ХХХ...ХХ - номер/код объекта.
//
// Пример:
// УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Истина, Истина) = "000001234"
// УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Ложь, Истина) = "Ф-000001234"
// УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Истина, Ложь) = "ГЛ-000001234"
// УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Ложь, Ложь) = "ФГЛ-000001234"
ДокПрием.НомерДок = ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(СокрЛП(Объект.Номер), Истина, Истина);
// Получает номер документа для вывода на печать; из номера удаляются префиксы и лидирующие нули.
// Функция:
// отбрасывает префикс организации,
// отбрасывает префикс информационной базы (опционально),
// отбрасывает пользовательские префиксы (опционально),
// удаляет лидирующие нули в номере объекта.
ДокПрием.НомерДок = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СокрЛП(Объект.Номер), Истина, Истина);
// Преобразует исходный табельный номер удаляя префикс организации и префикс информационной базы
//
ОбластьСтроки.Параметры.ТабельныйНомерНаПечать = ЗарплатаКадрыОтчеты.ТабельныйНомерНаПечать(ДанныеДетальныхЗаписей.Сотрудник.Код);
// Преобразует исходную строку в дату.
//
// Параметры:
// Значение - Строка - Строка, которую необходимо привести к дате.
// Формат даты должен быть в виде "ДД.ММ.ГГГГ" или "ДД/ММ/ГГ" или "ДД-ММ-ГГ",
// Например, "23.02.1980" или "23/02/80".
//
// Возвращаемое значение:
// Дата - полученная дата.
//
Для Каждого СтрокаТаблицы Из ЗагружаемыеДанные Цикл
СтрокаСотрудник = Сотрудники.Добавить();
СтрокаСотрудник.Идентификатор = СтрокаТаблицы.Идентификатор;
СтрокаСотрудник.ДатаНачала = СтроковыеФункцииКлиентСервер.СтрокаВДату(СтрокаТаблицы.ДатаНачала);
СтрокаСотрудник.ДатаОкончания = СтроковыеФункцииКлиентСервер.СтрокаВДату(СтрокаТаблицы.ДатаОкончания);
КонецЦикла;
// Преобразует исходную строку в число без вызова исключений.
//
// Параметры:
// Значение - Строка - Строка, которую необходимо привести к числу.
// Например, "10", "+10", "010", вернет 10;
// "(10)", "-10",вернет -10;
// "10,2", "10.2",вернет 10.2;
// "000", " ", "",вернет 0;
// "10текст", вернет Неопределено.
//
// Возвращаемое значение:
// Число, Неопределено - Полученное число, либо Неопределено, если строка не является числом.
//
ВведеннаяОчередность = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(СтрокаТаблицы.ПредставлениеОчередности);
// Формирует представление суммы прописью в указанной валюте.
//
// Параметры:
// СуммаЧислом - Число - сумма, которую надо представить прописью.
// Валюта - СправочникСсылка.Валюты - валюта, в которой нужно представить сумму.
// БезДробнойЧасти - Булево - указать Истина, если требуется получить сумму без дробной части (без копеек).
//
// Возвращаемое значение:
// Строка - сумма прописью.
ДанныеПолучаемыеНаХоду.СреднийЗаработок = ЗарплатаКадрыОтчеты.ТарифнаяСтавкаНаПечать(СреднийЗаработок, Истина);
//Получим: 25 204 руб. 14 коп.
ВалютаУчета = ЗарплатаКадры.ВалютаУчетаЗаработнойПлаты();
ДанныеПолучаемыеНаХоду.СреднийЗаработокПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(
Окр(СреднийЗаработок, 2), ВалютаУчета);
//Получим: Двадцать пять тысяч двести четыре рубля 14 копеек
ТекстПодразделение = "";
ПолучитьИерархиюПодразделенийРекурсивно(Выборка.Подразделение, ТекстПодразделение);
ДанныеОбъекта.Вставить("СотрудникПодразделение", ТекстПодразделение);
&НаСервере
Процедура ПолучитьИерархиюПодразделенийРекурсивно(Подразделение, ТекстПодразделение)
//Параметры:
//Подразделение, тип Справочник Подразделения
//ТекстПодразделение, тип Строка
//
//Исходная структура подразделений "Больница Боткина / Терапевтическое отделение / Кабинет врача-терапевта"
//
//Процедура выводит всю структуру кроме первого уровня ("Больница Боткина")
//В итоге получаем: "Терапевтическое отделение / Кабинет врача-терапевта"
Если Подразделение.Уровень() <> 0 Тогда
ПодразделениеНаименование = Подразделение.Наименование;
//ПолучитьСклоненияСтроки(ПодразделениеНаименование,
//,
//"ПД=Дательный");
ТекстПодразделение = ПодразделениеНаименование + " / " + ТекстПодразделение;
ПолучитьИерархиюПодразделенийРекурсивно(Подразделение.Родитель, ТекстПодразделение);
Иначе
СимволовВСтроке = СтрДлина(ТекстПодразделение);
ТекстПодразделение = Сред(ТекстПодразделение, 1, СимволовВСтроке-3);
КонецЕсли;
Конецпроцедуры
Подробнее о рекурсии: Рекурсия в 1С и управление деревом значений
// Проверяет вхождение даты в интервал
//
// Параметры:
// ПроверяемаяДата - Дата - проверяемая дата
// ДатаНачалаИнтервала - Дата - дата начала интервала
// ДатаОкончанияИнтервала - Дата - дата окончания интервала
// ВключатьГраницы - Булево - определят необходимость учета границ интервала при проверке
// Возвращаемое значение:
// Булево
//
ДатаВходитВИнтервал = ОбщегоНазначенияБЗК.ДатаВИнтервале(СтрокаРабочегоМеста.ДатаНачала,
НачалоДня(СтрокаУдержаний.ДатаНачала), НачалоДня(СтрокаРабочегоМеста.ДатаНачала), Ложь)
&НаСервере
Процедура ЗапросРазбитьИнтервалПоПериодамНаСервере()
// Формирует временную таблицу периодов с заданной периодичностью, формируемой, с помощью,
// запроса, возвращаемого методом ЗапросВТПериоды.
// Создает в МенеджерВременныхТаблиц временную таблицу с именем <ИмяВТ>
// и периодичностью <Периодичность>
// за интервал с <НачалоИнтервала> по <ОкончаниеИнтервала>.
// Функция возвращает запрос, формирующий временную таблицу периодов с заданной периодичностью.
//
// Параметры:
// ОписаниеНачалаИнтервала - Строка, имя параметра в тексте запроса ("&НачалоПериода", "ДАТАВРЕМЯ(2013, 1, 1)").
// - Дата, начальная дата интервала, за который формируются периоды.
// ОписаниеОкончанияИнтервала - Строка, имя параметра в тексте запроса,
// - Дата, конечная дата интервала, за который формируются периоды.
// Периодичность - периодичность, на которую будет разбиваться интервал.
// По умолчанию <МЕСЯЦ>. Может принимать значения: ГОД, КВАРТАЛ, МЕСЯЦ, ДЕНЬ.
// ИмяПоляПериод - наименование колонки во временной таблице периодов.
// По умолчанию <Период>.
// ИмяВТ - наименование временной таблицы периодов, по умолчанию <ВТПериоды>.
// ИспользоватьКонецПериода - булево, необязательный, по умолчанию - Ложь.
// Определяет необходимость использовать в качестве значения последнюю секунду периода.
// То есть если Истина, то для периодичности месяц,
// временная таблица будет заполнена датами конца каждого месяца,
// и если ложь, то - датами начала.
ДатаНачала = ДАТА(2019,01,01);
ДатаОкончания = ДАТА(2019,03,12);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(Запрос.МенеджерВременныхТаблиц, ДатаНачала, ДатаОкончания, , , "ВТДатыПоМесяцам", Ложь);
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(Запрос.МенеджерВременныхТаблиц, ДатаНачала, ДатаОкончания, "ДЕНЬ", "Дата", "ВТПериоды");
ВТДатыПоМесяцам = Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("ВТДатыПоМесяцам").ПолучитьДанные().Выгрузить();
//Возвращается
//01.01.2019 0:00:00
//01.02.2019 0:00:00
//01.03.2019 0:00:00
//Если установить, ДатаНачала = 11.01.2019, то получим:
//01.02.2019 0:00:00
//01.03.2019 0:00:00
ВТПериоды = Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("ВТПериоды").ПолучитьДанные().Выгрузить();
//Возвращается
//01.01.2019 0:00:00
//02.01.2019 0:00:00
//...
//12.03.2019 0:00:00
//Если установить, ДатаНачала = 11.01.2019, то получим:
//11.01.2019 0:00:00
//12.01.2019 0:00:00
//...
//12.03.2019 0:00:00
КонецПроцедуры
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.ВерсияБСП = "2.1.3.2";
ПараметрыРегистрации.Вставить("Версия", "1.0");
//ПараметрыРегистрации.Вставить("Информация", "");
ПараметрыРегистрации.Назначение.Добавить("Документ.ВедомостьНаВыплатуЗарплатыПеречислением");
//ПараметрыРегистрации.Назначение.Добавить("Документ.*"); // все документы
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = Метаданные().Представление(); //Синоним
НоваяКоманда.Идентификатор = Метаданные().ПолноеИмя(); //ПолноеИмя
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.Модификатор = "ПечатьMXL"; // Обязательно
//НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
//НоваяКоманда.Представление = Метаданные().Представление();
//НоваяКоманда.Идентификатор = Метаданные().ПолноеИмя();
//НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
//
//НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
//НоваяКоманда.Представление = Метаданные().Представление();
//НоваяКоманда.Идентификатор = Метаданные().ПолноеИмя();
//НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Возврат ПараметрыРегистрации;
КонецФункции
// Формирует печатные формы
//
// Параметры:
// МассивОбъектов - Массив - ссылки на объекты, которые нужно распечатать;
// КоллекцияПечатныхФорм - ТаблицаЗначений - сформированные табличные документы
// (выходной параметр).
// ОбъектыПечати - СписокЗначений - значение - ссылка на объект;
// представление - имя области в которой был выведен объект
// (выходной параметр);
// ПараметрыВывода - Структура - дополнительные параметры сформированных табличных документов
// (выходной параметр);
//
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, Метаданные().ПолноеИмя(), НСтр(Метаданные().Представление()),
ПечатьСписокПеречислений(МассивОбъектов, ОбъектыПечати));
КонецПроцедуры
Функция ПечатьСписокПеречислений(МассивОбъектов, ОбъектыПечати)
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.КлючПараметровПечати = Метаданные().ПолноеИмя();
Макет = ПолучитьМакет("ПФ_MXL_СписокПеречисленийНаЛицевыеСчета");
// получаем данные для печати
ВыборкаШапок = ВыборкаДляПечатиШапки(МассивОбъектов);
ВыборкаСтрок = ВыборкаДляПечатиТаблицы(МассивОбъектов);
ПервыйДокумент = Истина;
Возврат ТабличныйДокумент;
КонецФункции
Подробнее о механизмах отчетов, обработок, печатных форм: //infostart.ru/public/558559/
Универсальные функции для регистрации внешних отчетов/обработок: //infostart.ru/1c/articles/337144/
// 1. В модуле формы документа
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
#Область ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
#КонецОбласти
// 2. В модуле формы списка
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецПроцедуры
#Область ОбработчикиКомандФормы
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбласти
// 4. В менеджере объекта
#Область СлужебныйПрограммныйИнтерфейс
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КонецПроцедуры
#КонецОбласти
// 5. Чтобы можно было подключить к документу печатную форму
// В процедурах
ЗарплатаКадрыРасширенный.ПриОпределенииОбъектовСКомандамиПечати()
ЗарплатаКадрыБазовый.ПриОпределенииОбъектовСКомандамиПечати()
// добавляем строки
СписокОбъектов.Добавить(Документы.ПриказыОбИзбранииНаДолжностьОнлайн);
СписокОбъектов.Добавить(Документы.ПриказТекстовыйОнЛайн);
// Создает массив и помещает в него переданное значение.
//
// Параметры:
// Значение - Произвольный - любое значение.
//
// Возвращаемое значение:
// Массив - массив из одного элемента.
МассивОбъектов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Значение);
// Возвращает копию исходного массива с уникальными значениями.
//
// Параметры:
// Массив - Массив - массив произвольных значений.
//
// Возвращаемое значение:
// Массив - массив уникальных элементов.
//
ФизлицаДляОтчета = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ФизлицаДляОтчета);
// Преобразует таблицу значений в массив структур.
// Может использоваться для передачи на клиент данных в том случае, если таблица
// значений содержит только такие значения, которые могут
// быть переданы с сервера на клиент.
//
// Полученный массив содержит структуры, каждая из которых повторяет
// структуру колонок таблицы значений.
//
// Не рекомендуется использовать для преобразования таблиц значений
// с большим количеством строк.
//
// Параметры:
// ТаблицаЗначений - ТаблицаЗначений - исходная таблица значений.
//
// Возвращаемое значение:
// Массив - коллекция строк таблицы в виде структур.
МассивДанных = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаЗначений);
//Устаревшая функция
НовыйМассив = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(МассивИсточник)
//Новый вариант
// Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно,
// с учетом типов дочерних элементов. При этом содержимое значений объектных типов
// (СправочникОбъект, ДокументОбъект и т.п.) не копируются, а возвращаются ссылки на исходный объект.
//
// Параметры:
// Источник - Структура
// - ФиксированнаяСтруктура
// - Соответствие
// - ФиксированноеСоответствие
// - Массив
// - ФиксированныйМассив
// - СписокЗначений - объект, который необходимо скопировать.
// ФиксироватьДанные - Булево - если Истина - фиксировать, если Ложь - снять фиксацию.
// - Неопределено - не изменять.
//
// Возвращаемое значение:
// Структура,
// ФиксированнаяСтруктура,
// Соответствие
// ФиксированноеСоответствие
// Массив
// ФиксированныйМассив
// СписокЗначений - копия объекта, переданного в параметре Источник.
//
НовыйМассив = ОбщегоНазначения.СкопироватьРекурсивно(МассивИсточник);
НовыйМассив = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(МассивИсточник);
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.Фильтр = "Документы(*.xlsx, *.xls)|*.xlsx;*.xls";
ДиалогОткрытияФайла.Выбрать();
Объект.ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьДанные(Команда)
ДвоичныеДанные = Новый ДвоичныеДанные(Объект.ПутьКФайлу);
ОбработкаНаСервере(ДвоичныеДанные);
КонецПроцедуры
&НаСервере
Процедура ОбработкаНаСервере(ДвоичныеДанные)
ТабличныйДокумент = Новый ТабличныйДокумент();
Расширение = ".xls";
ФайлEXCELНаСервере = ПолучитьИмяВременногоФайла(Расширение);
ДвоичныеДанные.Записать(ФайлEXCELНаСервере);
ТабличныйДокумент.Прочитать(ФайлEXCELНаСервере);
УдалитьФайлы(ФайлEXCELНаСервере);
//Параметры
//1. НомерПервойСтроки. Первая страка будет содержать заголовки таблицы
//2. НомерПервойКолонки
ОбластьТаблицы = ТабличныйДокумент.Область(1, 1, ТабличныйДокумент.ВысотаТаблицы, ТабличныйДокумент.ШиринаТаблицы);
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьТаблицы);
ПостроительЗапроса.Выполнить();
ТаблицаДанных = ПостроительЗапроса.Результат.Выгрузить();
КонецПроцедуры
ЕЩЕ ВАРИАНТ:
ДОП. ССЫЛКИ:
// Преобразует строку таблицы значений в структуру.
// Свойства структуры и их значения совпадают с колонками переданной строки.
//
// Параметры:
// СтрокаТаблицыЗначений - СтрокаТаблицыЗначений - строка таблицы значений.
//
// Возвращаемое значение:
// Структура - преобразованная строка таблицы значений.
//
СтруктураДанных = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(ТаблицаЗначений[0]);
// Преобразует таблицу значений в структуру.
// Параметры:
// Таблица - таблица значений
// ИмяКлючаСтрок, строка с именем ключа для строк таблицы, к ключу будет добавлен номер строки.
//
Описание = Новый Структура();
Описание.Вставить("РежимЗаполнения", РежимЗаполнения);
Описание.Вставить("ДанныеРежимРаботы", ЗарплатаКадрыРасширенный.ТаблицаЗначенийВСтруктуру(ДанныеРежимРаботы));
Описание.Вставить("ДанныеРежимРаботыРасшифровка", ЗарплатаКадрыРасширенный.ТаблицаЗначенийВСтруктуру(ДанныеРежимРаботыРасшифровка));
Возврат Описание;
// Процедура дополняет таблицу значений Таблица значениями из массива Массив.
//
// Параметры:
// ПересчетФизическихЛиц - ТаблицаЗначений - таблица, которую необходимо заполнить значениями из массива;
// ФизическиеЛица - Массив - массив значений для заполнения таблицы;
// ИмяПоля - Строка - имя поля таблицы значений, в которое необходимо загрузить значения из массива.
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицуИзМассива(ПересчетФизическихЛиц, ФизическиеЛица, "ФизическоеЛицо");
// Дополняет таблицу значений-приемник данными из таблицы значений-источник.
//
// Параметры:
// ТаблицаИсточник - ТаблицаЗначений - таблица, из которой будут браться строки для заполнения;
// ТаблицаПриемник - ТаблицаЗначений - таблица, в которую будут добавлены строки из таблицы-источника.
//
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СведенияОДоходахНДФЛ, ОблагаемыеНалогомДоходы);
// Разбивает строку на несколько строк по указанному разделителю. Разделитель может иметь любую длину.
// В случаях, когда разделителем является строка из одного символа, и не используется параметр СокращатьНепечатаемыеСимволы,
// рекомендуется использовать функцию платформы СтрРазделить.
//
// Параметры:
// Значение - Строка - текст с разделителями;
// Разделитель - Строка - разделитель строк текста, минимум 1 символ;
// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк.
// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией:
// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки
// включаются в результат;
// - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в
// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а
// при других разделителях результатом функции будет пустой массив.
// СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок.
//
// Возвращаемое значение:
// Массив - массив строк.
//
// Пример:
// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(",один,,два,", ",")
// - возвратит массив из 5 элементов, три из которых - пустые: "", "один", "", "два", "";
// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина)
// - возвратит массив из двух элементов: "один", "два";
// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(" один два ", " ")
// - возвратит массив из двух элементов: "один", "два";
// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("")
// - возвратит пустой массив;
// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("",,Ложь)
// - возвратит массив с одним элементом: ""(пустая строка);
// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("", " ")
// - возвратит массив с одним элементом: "" (пустая строка).
ИменаКадровыхДанных = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаДанных, ",", , Истина);
// Сравнивает данные сложной структуры с учетом вложенности.
//
// Параметры:
// Данные1 - Структура, ФиксированнаяСтруктура,
// Соответствие, ФиксированноеСоответствие,
// Массив, ФиксированныйМассив,
// ХранилищеЗначения, ТаблицаЗначений,
// Строка, Число, Булево - сравниваемые данные.
//
// Данные2 - Произвольный - те же типы, что и для параметра Данные1.
//
// Возвращаемое значение:
// Булево - Истина, если совпадают.
ТаблицаДоИзменения = Запрос.Выполнить().Выгрузить();
ТаблицаПослеИзменения = Запрос.Выполнить().Выгрузить();
Если Не ОбщегоНазначения.ДанныеСовпадают(ТаблицаДоИзменения, ТаблицаПослеИзменения) Тогда
Результат.ЕстьИзменения = Истина;
КонецЕсли;
// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР.
//
// Параметры:
// Адрес - Строка, ОбъектXDTO - XDTO объект или строка XML соответствующие XDTO пакету Адрес.
// ДополнительныеПараметры - Структура - параметры контактной информации.
// * БезПредставлений - Булево - Если Истина, то поле представления адреса будет отсутствовать.
// * КодыКЛАДР - Булево - Если Истина, то возвращает структуру с кодами КЛАДР по всем частям адреса.
// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращает полное наименование адресных объектов.
// * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов.
// Возвращаемое значение:
// Структура - набор пар ключ-значение. Состав свойств для адреса
//Простой пример для начинающих
&НаСервере
Процедура ПроверитьАдресНаСервере()
ФизическоеЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию("Абакарова Мадина Сайдуллаевна");
Для каждого Строка Из ФизическоеЛицо.КонтактнаяИнформация Цикл
СведенияОбАдресе = РаботаСАдресами.СведенияОбАдресе(Строка.ЗначенияПолей);
КонецЦикла;
КонецПроцедуры
//Или
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
ДополнительныеПараметры = Новый Структура("НаименованиеВключаетСокращение", Истина);
ФактическийАдресСтруктура =
МодульРаботаСАдресами.СведенияОбАдресе(ФактическийАдресXML, ДополнительныеПараметры);
// Возвращает ссылку предопределенного элемента по его полному имени.
// Предопределенные элементы могут содержаться только в следующих объектах:
// - справочники;
// - планы видов характеристик;
// - планы счетов;
// - планы видов расчета.
// После изменения состава предопределенных следует выполнить метод
// ОбновитьПовторноИспользуемыеЗначения(), который сбросит кэш ПовтИсп в текущем сеансе.
//
// См. ОбщегоНазначения.ПредопределенныйЭлемент
//
// Параметры:
// ПолноеИмяПредопределенного - Строка - полный путь к предопределенному элементу, включая его имя.
// Формат аналогичен функции глобального контекста ПредопределенноеЗначение().
// Например:
// "Справочник.ВидыКонтактнойИнформации.EmailПользователя"
// "ПланСчетов.Хозрасчетный.Материалы"
// "ПланВидовРасчета.Начисления.ОплатаПоОкладу".
//
// Возвращаемое значение:
// ЛюбаяСсылка - ссылка на предопределенный элемент.
// Неопределено - если предопределенный элемент есть в метаданных, но не создан в ИБ.
ОтработаноДней = ОбщегоНазначенияКлиент.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.ОтработаноДней");
// Получение пустой ссылки или предопределенного элемента
Табель = ПредопределенноеЗначение("Документ.ТабельУчетаРабочегоВремени.ПустаяСсылка");
// Проверяет адреса на соответствие адресному классификатору
// и возвращает подходящие варианты, содержащие сведения об адресе.
// При проверке адреса через веб-сервиса выполнение функции может занимать 20 секунд.
// Поэтому для исключения зависаний пользовательского интерфейса, например при открытии формы,
// функцию следует вызвать в фоновом задании.
//
// Параметры:
// Адреса - Массив - проверяемые адреса. Содержит структуры с полями:
// * Адрес - проверяемый адрес во внутреннем формате JSON или в XML,
// соответствующем XDTO-пакету Адрес (http://www.v8.1c.ru/ssl/contactinfo),
// или его XML-сериализация, соответствующая структуре XDTO-пакета.
// * ФорматАдреса - Строка - устарело. Формат адреса. Варианты:
// * ФИАС адрес проверяется по всем уровням адреса;
// * КЛАДР - у адреса не проверяются на соответствие номера домов, округа,
// внутригородские районы, доп. территории и элементы доп. территорий.
//
// Возвращаемое значение:
// Массив - результаты анализа. Каждый элемент массива содержит структуры с полями:
// * Ошибки - Массив - описание ошибок поиска в классификаторе. Состоит из массива структур с полями:
// ** Ключ - Строка - служебный идентификатор места ошибки (путь XPath в объекте XDTO).
// ** Текст - Строка - текст ошибки.
// ** Подсказка - Строка - текст возможного исправления ошибки.
// * Варианты - Массив - устарело. Содержит описание найденных вариантов в виде массива структур с полями:
// ** Идентификатор - УникальныйИдентификатор - уникальный идентификационный код адресного объекта ФИАС.
// ** Индекс - Число - почтовый индекс адресного объекта.
// ** КодКЛАДР - Число - код КЛАДР ближайшего объекта.
// ** OKATO - Число - код общероссийского классификатора объектов административно-территориального деления.
// ** ОКТМО - Число - код общероссийского классификатора территорий муниципальных образований.
// ** КодИФНСФЛ - Строка - код инспекции ФНС обслуживающей физических лиц.
// ** КодИФНСЮЛ - Строка - код инспекции ФНС обслуживающей юридические лица.
// ** КодУчасткаИФНСФЛ - Строка - код территориального участка инспекции ФНС обслуживающей физических лиц.
// ** КодУчасткаИФНСЮЛ - Строка - код территориального участка инспекции ФНС обслуживающей юридические лица.
//
// Пример:
СтруктураПроверки = Новый Структура("Адрес, ФорматАдреса", Адрес, "ФИАС");
РезультатыПроверки = АдресныйКлассификатор.ПроверитьАдреса(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СтруктураПроверки));
Если РезультатыПроверки.Количество() > 0 И РезультатыПроверки.Варианты.Количество() > 0 Тогда
КодКЛАДР = РезультатыПроверки.Варианты[0].КодКЛАДР;
КонецЕсли;
&НаКлиенте
Процедура Заменить(Команда)
ЭтаФорма.Закрыть();
КоличествоЗаписей = 0;
Сч = 0;
ВсегоЗаписей = ЭтаФорма.ВладелецФормы.ЗаписиОСтаже.Количество();
Для каждого Строка Из ЭтаФорма.ВладелецФормы.ЗаписиОСтаже Цикл
Сч = Сч + 1;
ДоляПроцента = Сч * 100 / ВсегоЗаписей;
//ВЫВОДИМ ПРОГРЕСС БАР
Состояние("Выполнение операции", ДоляПроцента, "Операция выполняется");
Если Строка.ЗамещениеГосударственныхМуниципальныхДолжностей = ЭтотОбъект.КодГС_КоторыйЗаменяем Тогда
Строка.ЗамещениеГосударственныхМуниципальныхДолжностей = ЭтотОбъект.КодГС_НаЧтоЗаменяем;
КоличествоЗаписей = КоличествоЗаписей + 1;
КонецЕсли;
КонецЦикла;
ЭтаФорма.ВладелецФормы.Модифицированность = Истина;
//ВЫВОДИМ ОПОВЕЩЕНИЕ ПОЛЬЗОВАТЕЛЮ
ПоказатьОповещениеПользователя("Обработка завершена! ", , "Изменено записей: " + КоличествоЗаписей, , , )
КонецПроцедуры
Подробнее о сообщениях пользователю в статье: //infostart.ru/public/1004554
Пример вывода вопроса пользователю:
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ЭтаФорма.Модифицированность Тогда
Отказ = Истина;
ОповещениеПользователя = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект, );
ПоказатьВопрос(ОповещениеПользователя, "Данные изменены, но не сохранены. Сохранить данные?", РежимДиалогаВопрос.ДаНет);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметр) Экспорт
Если Результат = КодВозвратаДиалога.Нет Тогда
ЭтаФорма.Модифицированность = Ложь;
Закрыть();
Иначе
КонецЕсли;
КонецПроцедуры
Пример вывода сообщения с привязкой к элементу табличной части:
Для каждого Строка Из Объект.Начисления Цикл
КадровыеДанныеСотрудников = ПолучитьКадровыеДанныеНаСервере(Строка.Сотрудник);
Если КадровыеДанныеСотрудников.ДатаУвольнения <> ДАТА(1,1,1) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Сотрудник " + Строка.Сотрудник + " уволен " + Формат(КадровыеДанныеСотрудников.ДатаУвольнения, "ДЛФ=D") + " рекомендуется его начислить отдельным документом.";
Сообщение.Поле = "Объект.Начисления[" + (Строка.НомерСтроки - 1) + "].Сотрудник";
Сообщение.Сообщить();
КонецЕсли;
КонецЦикла;
&НаКлиенте
Процедура Расш_ВводСведенийПоТрудовомуДоговоруДанныеТрудовогоДоговораПосле(Команда)
ПараметрыФормы = Новый Структура();
Отбор = Новый Структура();
Отбор.Вставить("Сотрудник", ЭтотОбъект.СотрудникСсылка);
ПараметрыФормы.Вставить("Отбор", Отбор);
Форма = ПолучитьФорму("РегистрСведений.ОсновныеДанныеКонтрактаДоговораСотрудника.ФормаСписка", ПараметрыФормы,,,,);
Форма.Открыть();
КонецПроцедуры
Открытие формы выбора с возвратом значения:
&НаКлиенте
Процедура ШтатаноеРасписаниеКатегорияДолжностиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
Настройки = Новый НастройкиКомпоновкиДанных;
о = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
о.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Владелец");
о.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
о.ПравоеЗначение = ПолучитьДопРеквизит("Категория должности (Должности)");
о.Использование = Истина;
о.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
ПараметрыФормы.Вставить("ФиксированныеНастройки", Настройки);
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина);
ОткрытьФорму("Справочник.ЗначенияСвойствОбъектов.ФормаСписка", ПараметрыФормы, Элементы.ШтатаноеРасписаниеКатегорияДолжности, ,,,);
КонецПроцедуры
Подробнее об открытии форм в статье: //infostart.ru/public/236382/
Список регистров представлений актуален для релиза 3.1.11.133
ВЫБРАТЬ
ДАТАВРЕМЯ(1, 1, 1) КАК Период
ПОМЕСТИТЬ Представления_Периоды
ГДЕ
"НачалоИнтервала" = &НачалоПериода
И "ОкончаниеИнтервала" = &КонецПериода
И "Периодичность" = "МЕСЯЦ"
И "ИспользоватьКонецПериода" = ЛОЖЬ
;
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Сотрудники.Ссылка КАК Сотрудник,
ВЫБОР
КОГДА &ВыводитьДанныеПредстоящихПриемов
И &Период < ТекущиеКадровыеДанныеСотрудников.ДатаПриема
ТОГДА ТекущиеКадровыеДанныеСотрудников.ДатаПриема
ИНАЧЕ &Период
КОНЕЦ КАК Период
ПОМЕСТИТЬ ВТСотрудники
{ВЫБРАТЬ
Сотрудник.*}
ИЗ
Справочник.Сотрудники КАК Сотрудники
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
ПО Сотрудники.ФизическоеЛицо = ТекущиеКадровыеДанныеСотрудников.ФизическоеЛицо
И Сотрудники.Ссылка = ТекущиеКадровыеДанныеСотрудников.Сотрудник
ГДЕ
Сотрудники.Ссылка = Сотрудники.ГоловнойСотрудник
{ГДЕ
Сотрудники.Ссылка.* КАК Сотрудник,
Сотрудники.Код КАК ТабельныйНомер,
Сотрудники.ФизическоеЛицо.*,
Сотрудники.ГоловнаяОрганизация.*,
Сотрудники.ТекущийПроцентСевернойНадбавки КАК ПроцентСевернойНадбавки,
Сотрудники.ФизическоеЛицо.Пол КАК Пол,
Сотрудники.ФизическоеЛицо.ДатаРождения КАК ДатаРождения,
Сотрудники.ФизическоеЛицо.ИНН КАК ИНН,
Сотрудники.ФизическоеЛицо.СтраховойНомерПФР КАК СтраховойНомерПФР,
Сотрудники.ФизическоеЛицо.МестоРождения КАК МестоРождения}
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка) КАК ФизическоеЛицо,
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК ГоловнаяОрганизация,
"" КАК ТабельныйНомер,
ДАТАВРЕМЯ(1, 1, 1) КАК РабочееМестоПериодРегистрации,
ЗНАЧЕНИЕ(Документ.ПриемНаРаботу.ПустаяСсылка) КАК РабочееМестоРегистратор,
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация,
ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность,
ЗНАЧЕНИЕ(Справочник.ШтатноеРасписание.ПустаяСсылка) КАК ДолжностьПоШтатномуРасписанию,
ДАТАВРЕМЯ(1, 1, 1) КАК ГрафикРаботыПериодРегистрации,
ЗНАЧЕНИЕ(Документ.ПриемНаРаботу.ПустаяСсылка) КАК ГрафикРаботыРегистратор,
ЗНАЧЕНИЕ(Справочник.ГрафикиРаботыСотрудников.ПустаяСсылка) КАК ГрафикРаботы,
0 КАК КоличествоСтавок,
ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ПустаяСсылка) КАК ВидЗанятости,
ЗНАЧЕНИЕ(Справочник.ТарифныеСетки.ПустаяСсылка) КАК ТарифнаяСетка,
ДАТАВРЕМЯ(1, 1, 1) КАК РазрядКатегорияПериодРегистрации,
ЗНАЧЕНИЕ(Документ.ПриемНаРаботу.ПустаяСсылка) КАК РазрядКатегорияРегистратор,
ЗНАЧЕНИЕ(Справочник.РазрядыКатегорииДолжностей.ПустаяСсылка) КАК РазрядКатегория,
ЗНАЧЕНИЕ(Справочник.ТарифныеСетки.ПустаяСсылка) КАК ТарифнаяСеткаНадбавки,
ДАТАВРЕМЯ(1, 1, 1) КАК СостояниеПериодРегистрации,
ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.ПустаяСсылка) КАК Состояние,
ДАТАВРЕМЯ(1, 1, 1) КАК ОплатаТрудаПериодЗаписи,
ЗНАЧЕНИЕ(Документ.ПриемНаРаботу.ПустаяСсылка) КАК ОплатаТрудаРегистратор,
0 КАК ТарифнаяСтавка,
ЗНАЧЕНИЕ(Справочник.ПоказателиРасчетаЗарплаты.ПустаяСсылка) КАК ПоказательТарифнойСтавки,
0 КАК ДоляНеполногоРабочегоВремени,
0 КАК Надбавка,
0 КАК ФОТ,
ДАТАВРЕМЯ(1, 1, 1) КАК АвансПериодРегистрации,
ЗНАЧЕНИЕ(Документ.ПриемНаРаботу.ПустаяСсылка) КАК АвансРегистратор,
0 КАК Аванс,
ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаАванса.ПустаяСсылка) КАК СпособРасчетаАванса,
ВЫРАЗИТЬ(0 КАК ЧИСЛО(4, 2)) КАК ПроцентСевернойНадбавки,
ЗНАЧЕНИЕ(Перечисление.ПорядокНачисленияСеверныхНадбавок.ПустаяСсылка) КАК ПорядокИсчисленияПроцентаСевернойНадбавки,
ИСТИНА КАК ПроцентСевернойНадбавкиИзменяется,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаПриема,
"" КАК ТрудовойДоговорНомер,
ДАТАВРЕМЯ(1, 1, 1) КАК ТрудовойДоговорДата,
ЗНАЧЕНИЕ(Документ.ПриемНаРаботу.ПустаяСсылка) КАК ПриказОПриеме,
ДАТАВРЕМЯ(1, 1, 1) КАК ПриказОПриемеДатаЗавершенияТрудовогоДоговора,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаУвольнения,
ЗНАЧЕНИЕ(Документ.Увольнение.ПустаяСсылка) КАК ПриказОбУвольнении,
ЗНАЧЕНИЕ(Справочник.ОснованияУвольнения.ПустаяСсылка) КАК ПриказОбУвольненииСтатьяТКРФ,
"" КАК ПриказОбУвольненииНомер,
ДАТАВРЕМЯ(1, 1, 1) КАК ПриказОбУвольненииДата,
ЗНАЧЕНИЕ(Перечисление.ПолФизическогоЛица.ПустаяСсылка) КАК Пол,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаРождения,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК ИНН,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК СтраховойНомерПФР,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК МестоРождения,
ДАТАВРЕМЯ(1, 1, 1) КАК ГражданствоПериодРегистрации,
ЗНАЧЕНИЕ(Справочник.СтраныМира.ПустаяСсылка) КАК Страна,
"" КАК ИННВСтранеГражданства,
ДАТАВРЕМЯ(1, 1, 1) КАК ВидЗастрахованногоЛицаПериодРегистрации,
ЗНАЧЕНИЕ(Перечисление.ВидыЗастрахованныхЛицОбязательногоСтрахования.ПустаяСсылка) КАК ВидЗастрахованногоЛица,
ДАТАВРЕМЯ(1, 1, 1) КАК ФИОПериодРегистрации,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК Фамилия,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК Имя,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК Отчество,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК ФИОПолные,
ДАТАВРЕМЯ(1, 1, 1) КАК ДокументПериодРегистрации,
ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ПустаяСсылка) КАК ДокументВид,
"" КАК ДокументКодМВД,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК ДокументСерия,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК ДокументНомер,
ДАТАВРЕМЯ(1, 1, 1) КАК ДокументДатаВыдачи,
ДАТАВРЕМЯ(1, 1, 1) КАК ДокументСрокДействия,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК ДокументКемВыдан,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК ДокументКодПодразделения,
"" КАК ДокументПредставление,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК АдресПоПрописке,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК АдресПоПропискеПредставление,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаРегистрации,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК АдресМестаПроживания,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК АдресМестаПроживанияПредставление,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК ТелефонМобильныйПредставление,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК ТелефонДомашнийПредставление,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК ТелефонРабочийПредставление,
ВЫРАЗИТЬ("" КАК СТРОКА) КАК EMailПредставление,
ЗНАЧЕНИЕ(Справочник.ЯзыкиНародовМира.ПустаяСсылка) КАК ВладеемыйЯзык1,
ЗНАЧЕНИЕ(Справочник.СтепениЗнанияЯзыка.ПустаяСсылка) КАК ВладеемыйЯзык1СтепеньЗнания,
ЗНАЧЕНИЕ(Справочник.ЯзыкиНародовМира.ПустаяСсылка) КАК ВладеемыйЯзык2,
ЗНАЧЕНИЕ(Справочник.СтепениЗнанияЯзыка.ПустаяСсылка) КАК ВладеемыйЯзык2СтепеньЗнания,
ЗНАЧЕНИЕ(Справочник.ПрофессииРабочих.ПустаяСсылка) КАК Профессия1,
ЗНАЧЕНИЕ(Справочник.ПрофессииРабочих.ПустаяСсылка) КАК Профессия2,
0 КАК ОбщийСтажДней,
0 КАК ОбщийСтажМесяцев,
0 КАК ОбщийСтажЛет,
0 КАК НепрерывныйСтажДней,
0 КАК НепрерывныйСтажМесяцев,
0 КАК НепрерывныйСтажЛет,
0 КАК СтажНаНадбавкуЗаВыслугуЛетДней,
0 КАК СтажНаНадбавкуЗаВыслугуЛетМесяцев,
0 КАК СтажНаНадбавкуЗаВыслугуЛетЛет,
0 КАК СтраховойСтажДней,
0 КАК СтраховойСтажМесяцев,
0 КАК СтраховойСтажЛет,
0 КАК РасширенныйСтраховойСтажДней,
0 КАК РасширенныйСтраховойСтажМесяцев,
0 КАК РасширенныйСтраховойСтажЛет,
0 КАК ПрочийСтажДней,
0 КАК ПрочийСтажМесяцев,
0 КАК ПрочийСтажЛет,
0 КАК ОбщийНаучноПедагогическийСтажДней,
0 КАК ОбщийНаучноПедагогическийСтажМесяцев,
0 КАК ОбщийНаучноПедагогическийСтажЛет,
0 КАК ПедагогическийСтажДней,
0 КАК ПедагогическийСтажМесяцев,
0 КАК ПедагогическийСтажЛет,
0 КАК СеверныйСтажДней,
0 КАК СеверныйСтажМесяцев,
0 КАК СеверныйСтажЛет,
ДАТАВРЕМЯ(1, 1, 1) КАК СостояниеВБракеПериодРегистрации,
ЗНАЧЕНИЕ(Справочник.СостояниеВБраке.ПустаяСсылка) КАК СостояниеВБраке,
ДАТАВРЕМЯ(1, 1, 1) КАК ВоинскийУчетПериодРегистрации,
ЗНАЧЕНИЕ(Перечисление.КатегорииЗапасаВоеннообязанных.ПустаяСсылка) КАК ВоинскийУчетКатегорияЗапаса,
ЗНАЧЕНИЕ(Справочник.ЗванияГражданскогоВоинскогоУчета.ПустаяСсылка) КАК ВоинскийУчетЗвание,
ЗНАЧЕНИЕ(Справочник.СоставыВоеннослужащих.ПустаяСсылка) КАК ВоинскийУчетСостав,
"" КАК ВоинскийУчетВУС,
ЗНАЧЕНИЕ(Перечисление.ГодностьКВоеннойСлужбе.ПустаяСсылка) КАК ВоинскийУчетГодность,
ЗНАЧЕНИЕ(Справочник.Военкоматы.ПустаяСсылка) КАК ВоинскийУчетВоенкомат,
"" КАК ВоинскийУчетНомерКомандыПартии,
ЗНАЧЕНИЕ(Справочник.ПереченьДолжностейДляБронированияГраждан.ПустаяСсылка) КАК ВоинскийУчетПунктПеречня,
ИСТИНА КАК ВоинскийУчетНаличиеМобпредписания,
ЗНАЧЕНИЕ(Перечисление.ОтношениеКВоинскойОбязанности.ПустаяСсылка) КАК ВоинскийУчетОтношениеКВоинскойОбязанности,
ЗНАЧЕНИЕ(Перечисление.ОтношениеКВоинскомуУчету.ПустаяСсылка) КАК ВоинскийУчетОтношениеКВоинскомуУчету,
ДАТАВРЕМЯ(1, 1, 1) КАК ВоинскийУчетЗабронированОрганизациейПериодРегистрации,
ЗНАЧЕНИЕ(Документ.БронированиеГражданПребывающихВЗапасе.ПустаяСсылка) КАК ВоинскийУчетЗабронированОрганизациейРегистратор,
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК ВоинскийУчетЗабронированОрганизацией,
ЗНАЧЕНИЕ(Справочник.УчебныеЗаведения.ПустаяСсылка) КАК ПослеВузовскоеОбразованиеУчебноеЗаведение,
ЗНАЧЕНИЕ(Справочник.ВидыОбразованияФизическихЛиц.ПустаяСсылка) КАК ПослеВузовскоеОбразованиеВидОбразования,
ЗНАЧЕНИЕ(Справочник.ВидыОбразованияФизическихЛиц.ПустаяСсылка) КАК ПослеВузовскоеОбразованиеВидПослевузовскогоОбразования,
ЗНАЧЕНИЕ(Справочник.ВидыДокументовОбОбразовании.ПустаяСсылка) КАК ПослеВузовскоеОбразованиеВидДокумента,
ДАТАВРЕМЯ(1, 1, 1) КАК ПослеВузовскоеОбразованиеНачало,
ДАТАВРЕМЯ(1, 1, 1) КАК ПослеВузовскоеОбразованиеОкончание,
"" КАК ПослеВузовскоеОбразованиеСерия,
"" КАК ПослеВузовскоеОбразованиеНомер,
ДАТАВРЕМЯ(1, 1, 1) КАК ПослеВузовскоеОбразованиеДатаВыдачи,
ЗНАЧЕНИЕ(Справочник.КлассификаторСпециальностейПоОбразованию.ПустаяСсылка) КАК ПослеВузовскоеОбразованиеСпециальность,
"" КАК ПослеВузовскоеОбразованиеКвалификация,
ЗНАЧЕНИЕ(Справочник.УчебныеЗаведения.ПустаяСсылка) КАК Образование1УчебноеЗаведение,
ЗНАЧЕНИЕ(Справочник.ВидыОбразованияФизическихЛиц.ПустаяСсылка) КАК Образование1ВидОбразования,
ДАТАВРЕМЯ(1, 1, 1) КАК Образование1Начало,
ДАТАВРЕМЯ(1, 1, 1) КАК Образование1Окончание,
ЗНАЧЕНИЕ(Справочник.КлассификаторСпециальностейПоОбразованию.ПустаяСсылка) КАК Образование1Специальность,
ЗНАЧЕНИЕ(Справочник.ВидыДокументовОбОбразовании.ПустаяСсылка) КАК Образование1ВидДокумента,
"" КАК Образование1Серия,
"" КАК Образование1Номер,
ДАТАВРЕМЯ(1, 1, 1) КАК Образование1ДатаВыдачи,
"" КАК Образование1Квалификация,
ЗНАЧЕНИЕ(Справочник.УчебныеЗаведения.ПустаяСсылка) КАК Образование2УчебноеЗаведение,
ЗНАЧЕНИЕ(Справочник.ВидыОбразованияФизическихЛиц.ПустаяСсылка) КАК Образование2ВидОбразования,
ДАТАВРЕМЯ(1, 1, 1) КАК Образование2Начало,
ДАТАВРЕМЯ(1, 1, 1) КАК Образование2Окончание,
ЗНАЧЕНИЕ(Справочник.КлассификаторСпециальностейПоОбразованию.ПустаяСсылка) КАК Образование2Специальность,
ЗНАЧЕНИЕ(Справочник.ВидыДокументовОбОбразовании.ПустаяСсылка) КАК Образование2ВидДокумента,
"" КАК Образование2Серия,
"" КАК Образование2Номер,
ДАТАВРЕМЯ(1, 1, 1) КАК Образование2ДатаВыдачи,
"" КАК Образование2Квалификация,
ЗНАЧЕНИЕ(Справочник.УчебныеЗаведения.ПустаяСсылка) КАК ВысшееОбразованиеУчебноеЗаведение,
ДАТАВРЕМЯ(1, 1, 1) КАК ВысшееОбразованиеНачало,
ДАТАВРЕМЯ(1, 1, 1) КАК ВысшееОбразованиеОкончание,
ЗНАЧЕНИЕ(Справочник.УченыеСтепени.ПустаяСсылка) КАК УченаяСтепень,
ЗНАЧЕНИЕ(Справочник.ОтраслиНауки.ПустаяСсылка) КАК УченаяСтепеньОтрасльНауки,
ДАТАВРЕМЯ(1, 1, 1) КАК УченаяСтепеньДатаПрисуждения,
"" КАК УченаяСтепеньДиссертационныйСовет,
"" КАК УченаяСтепеньДипломСерияНомер,
"" КАК УченаяСтепеньОрганизация,
ЗНАЧЕНИЕ(Справочник.УченыеЗвания.ПустаяСсылка) КАК УченоеЗвание,
"" КАК УченоеЗваниеАттестатСерия,
"" КАК УченоеЗваниеАттестатНомер,
ДАТАВРЕМЯ(1, 1, 1) КАК УченоеЗваниеДатаПрисвоения,
"" КАК УченоеЗваниеОрганизация,
ЗНАЧЕНИЕ(Справочник.КлассификаторСпециальностейПоОбразованию.ПустаяСсылка) КАК УченоеЗваниеСпециальность,
ЛОЖЬ КАК ИмеетНаучныеТруды,
ЛОЖЬ КАК ИмеетИзобретения,
ЗНАЧЕНИЕ(Справочник.Награды.ПустаяСсылка) КАК ПочетноеЗвание,
ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровССотрудниками.ПустаяСсылка) КАК ВидДоговора,
ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровССотрудниками.ПустаяСсылка) КАК ТекущийВидДоговора,
"" КАК ПолученныеОбразования,
"" КАК Награды,
"" КАК Документы,
"" КАК ЗнанияЯзыков,
"" КАК Профессии,
"" КАК Специальности,
"" КАК ТрудоваяДеятельность,
"" КАК СоставСемьи,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаДоговораКонтракта,
"" КАК НомерДоговораКонтракта,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаНачала,
ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка) КАК ПредставительНанимателя,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК ДолжностьПредставителяНанимателя,
"" КАК ОснованиеПредставителя,
"" КАК ВидАктаГосоргана,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаОкончания,
ЛОЖЬ КАК СрочныйДоговор,
ЛОЖЬ КАК СезонныйДоговор,
"" КАК СрокЗаключенияДоговора,
"" КАК ОборудованиеРабочегоМеста,
"" КАК ИныеУсловияДоговора,
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК ВладелецМестаВыплаты,
ЗНАЧЕНИЕ(Перечисление.ВидыМестВыплатыЗарплаты.ПустаяСсылка) КАК ВидМестаВыплаты,
ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка) КАК МестоВыплаты,
ДАТАВРЕМЯ(1, 1, 1) КАК СтатусНалогоплательщикаПериодРегистрации,
ЗНАЧЕНИЕ(Справочник.СтатусыНалогоплательщиковПоНДФЛ.ПустаяСсылка) КАК СтатусНалогоплательщика,
ДАТАВРЕМЯ(1, 1, 1) КАК УчетЗатратПериодРегистрации,
ЗНАЧЕНИЕ(Справочник.СтатьиФинансированияЗарплата.ПустаяСсылка) КАК СтатьяФинансирования,
ЗНАЧЕНИЕ(Справочник.СпособыОтраженияЗарплатыВБухУчете.ПустаяСсылка) КАК СпособОтраженияЗарплатыВБухучете,
ИСТИНА КАК ОтношениеКЕНВД,
ДАТАВРЕМЯ(1, 1, 1) КАК ЗарплатныйПроектДатаОткрытияЛицевогоСчета,
ЗНАЧЕНИЕ(Документ.ПодтверждениеОткрытияЛицевыхСчетовСотрудников) КАК ЗарплатныйПроектРегистратор,
ДАТАВРЕМЯ(1, 1, 1) КАК ЗарплатныйПроект,
"" КАК НомерЛицевогоСчета,
ДАТАВРЕМЯ(1, 1, 1) КАК ИнвалидностьПериодРегистрации,
ИСТИНА КАК Инвалидность,
ДАТАВРЕМЯ(1, 1, 1) КАК ИнвалидностьДатаВыдачи,
ДАТАВРЕМЯ(1, 1, 1) КАК ИнвалидностьСрокДействияСправки,
ДАТАВРЕМЯ(1, 1, 1) КАК ТерриторияПериодРегистрации,
ЗНАЧЕНИЕ(Документ.ПриемНаРаботу.ПустаяСсылка) КАК ТерриторияРегистратор,
ЗНАЧЕНИЕ(Справочник.ТерриторииВыполненияРабот.ПустаяСсылка) КАК Территория
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников
ИЗ
ВТСотрудники КАК ВТСотрудники
ГДЕ
"ТолькоРазрешенные" = ИСТИНА
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ДАТАВРЕМЯ(1, 1, 1) КАК МесяцНачисления,
ДАТАВРЕМЯ(1, 1, 1) КАК ПериодДействия,
НЕОПРЕДЕЛЕНО КАК Регистратор,
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация,
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение,
ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ПустаяСсылка) КАК ВидРасчета,
0 КАК ОтработаноДней,
0 КАК ОтработаноЧасов,
0 КАК ОтработаноДнейВПериоде,
0 КАК ОтработаноЧасовВПериоде,
0 КАК ОплаченоДней,
0 КАК ОплаченоЧасов,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаНачала,
ЗНАЧЕНИЕ(Справочник.СтатьиФинансированияЗарплата.ПустаяСсылка) КАК СтатьяФинансирования,
ЛОЖЬ КАК ВремяВЧасах,
ЗНАЧЕНИЕ(Справочник.СтатьиРасходовЗарплата.ПустаяСсылка) КАК СтатьяРасходов,
НЕОПРЕДЕЛЕНО КАК ДокументОснование,
0 КАК ИдентификаторСтроки
ПОМЕСТИТЬ Представления_ОтработанноеВремя
ИЗ
ВТНачисленияИУдержанияБезКадровыхДанных КАК НачисленияИУдержания
ГДЕ
"НачалоПериода" = &НачалоПериода
И "ОкончаниеПериода" = &КонецПериода
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.ВидыСтажа.ПустаяСсылка) КАК ВидСтажа,
0 КАК ВсегоМесяцев,
0 КАК Лет,
0 КАК Месяцев,
0 КАК Дней,
0 КАК РазмерМесяцев,
0 КАК РазмерДней,
ДАТАВРЕМЯ(1, 1, 1) КАК ПериодРегистрации,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаРасчетаСтажа,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаОтсчета,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаОкончания,
ДАТАВРЕМЯ(1, 1, 1) КАК НачалоБудущегоМесяца
ПОМЕСТИТЬ Представления_СтажиСотрудников
ИЗ
ВТИзмеренияДляСрезаПоследнихФЛ КАК ВТИзмеренияДляСрезаПоследнихФЛ
ГДЕ
"ТолькоРазрешенные" = ИСТИНА
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 0
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация,
ЗНАЧЕНИЕ(Справочник.ШтатноеРасписание.ПустаяСсылка) КАК ПозицияШтатногоРасписания,
ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность,
ЗНАЧЕНИЕ(Справочник.ТарифныеСетки.ПустаяСсылка) КАК ТарифнаяСетка,
ЗНАЧЕНИЕ(Справочник.РазрядыКатегорииДолжностей.ПустаяСсылка) КАК РазрядКатегория,
ЗНАЧЕНИЕ(Справочник.РазрядыКатегорииДолжностей.ПустаяСсылка) КАК РазрядКатегорияНадбавки,
0 КАК РайонныйКоэффициент,
0 КАК ПроцентСевернойНадбавки,
0 КАК КоличествоСтавок,
0 КАК ОкладТариф,
0 КАК ФОТ,
0 КАК Значение,
ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ПустаяСсылка) КАК Начисление,
ЗНАЧЕНИЕ(Справочник.ПоказателиРасчетаЗарплаты.ПустаяСсылка) КАК Показатель
ПОМЕСТИТЬ Представления_ШтатноеРасписание
ГДЕ
"ТолькоРазрешенные" = ИСТИНА
И "ДатаАктуальности" = &ДатаАктуальности
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ПустаяСсылка) КАК Начисление,
0 КАК Размер,
0 КАК ЗначениеОсновногоПоказателя,
НЕОПРЕДЕЛЕНО КАК Регистратор,
НЕОПРЕДЕЛЕНО КАК ДокументОснование,
ДАТАВРЕМЯ(1, 1, 1) КАК Период,
ДАТАВРЕМЯ(1, 1, 1) КАК ПериодЗаписи,
ИСТИНА КАК НачислениеТарифнойСтавки
ЗНАЧЕНИЕ(Справочник.ПоказателиРасчетаЗарплаты.ПустаяСсылка) КАК ОсновнойПоказатель
ПОМЕСТИТЬ Представления_ПлановыеНачисленияСотрудников
ИЗ
ВТИзмеренияДляСрезаПоследних КАК ИзмеренияДатыДляНабораЗаписей
ГДЕ
"ТолькоРазрешенные" = ИСТИНА
;
Список представлений возможно будет актуален и на текущем релизе 3.1.11
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудниковАнализНачисленийИУдержаний |
ПОМЕСТИТЬ Представления_МестоВСтруктуреПредприятия |
ПОМЕСТИТЬ Представления_ОтработанноеВремя |
ПОМЕСТИТЬ Представления_Периоды |
ПОМЕСТИТЬ Представления_ПодразделенияСортировкиСотрудников |
ПОМЕСТИТЬ Представления_СвойстваСтатейФинансирования |
ПОМЕСТИТЬ Представления_ШтатноеРасписание |
ПОМЕСТИТЬ Представления_ДанныеУчетаВремениИСостоянийСотрудников |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников_ВсеКадровыеДанные |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников_Зарплата |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников_ПриПриеме |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников_СотрудникиОтчета |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников_ФОТ |
ПОМЕСТИТЬ Представления_КадровыеДанныеФизическихЛиц |
ПОМЕСТИТЬ Представления_Периоды |
ПОМЕСТИТЬ Представления_Периоды_Месяца |
ПОМЕСТИТЬ Представления_Периоды_МесяцыОтчета |
ПОМЕСТИТЬ Представления_ПлановоеВремя |
ПОМЕСТИТЬ Представления_ПлановыеНачисленияСотрудников |
ПОМЕСТИТЬ Представления_ПлановыеУдержанияСотрудников |
ПОМЕСТИТЬ Представления_СвойстваСтатейФинансирования |
ПОМЕСТИТЬ Представления_СрезПоследних_ВидыЗанятостиСотрудников |
ПОМЕСТИТЬ Представления_СрезПоследних_ГрафикРаботыСотрудников |
ПОМЕСТИТЬ Представления_СрезПоследних_ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников |
ПОМЕСТИТЬ Представления_СрезПоследних_КадроваяИсторияСотрудников |
ПОМЕСТИТЬ Представления_СрезПоследних_ПлановыйФОТ |
ПОМЕСТИТЬ Представления_СрезПоследних_ПрименениеДополнительныхПериодическихПоказателейРасчетаЗарплатыСотрудников |
ПОМЕСТИТЬ Представления_СрезПоследних_СведенияОбИнвалидностиФизическихЛиц |
ПОМЕСТИТЬ Представления_СтажиСотрудников |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_ВидыЗанятостиСотрудников |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_ГрафикРаботыСотрудников |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_КадроваяИсторияСотрудников |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_ПлановыеНачисления |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_ПлановыйФОТ |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_СведенияОбИнвалидностиФизическихЛиц |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_СостоянияВБракеФизическихЛиц |
ПОМЕСТИТЬ Представления_ТекущаяКадроваяРасстановка |
ПОМЕСТИТЬ Представления_ФактическиеОтпускаСотрудников |
ПОМЕСТИТЬ Представления_ШтатноеРасписание |
ПОМЕСТИТЬ Представления_ШтатноеРасписание_КонецПериода |
ПОМЕСТИТЬ Представления_ШтатноеРасписание_НачалоПериода |
ЗУП. ЗАПРОСЫ
Введение в механизм представлений в ЗУП ред. 3
Кадровые данные сотрудников в ЗУП 3.1 в отчетах
Подмена временной таблицы в запросе (Менеджер временных таблиц)
Функции для обработки произвольной таблицы значений (Соединить таблицы, свернуть таблицы)
ВНЕШНИЕ ПЕЧАТНЫЕ ФОРМЫ
[БСП] Внешняя печатная форма: как перед печатью выводить форму настроек
БСП
Работаем с контактной информацией в конфигурациях на БСП (адреса, номера телефонов)
Обзор полезных методов БСП 3.1.4
Разбираемся с механизмом Дополнительные отчеты и обработки в БСП
Полезные функции БСП. Часть 1.
Полезные функции БСП. Часть 2.
Полезные процедуры и функции для программиста
Склонение представлений объектов в ЗУП 3.1 - как это работает?
ПЛАТФОРМА
Информирование пользователя. Работа с объектом «СообщениеПользователю»
Форма выбора (подбор) в управляемых формах
ИНТЕРЕСНЫЕ ОБРАБОТКИ
Конвертация любых адресов, написанных в свободной форме, к ФИАС. Сервис Ahunter
Буду очень признателен, если Вы будете делиться своим опытом и найденными процедурами и функциями.