Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке
&НаСервере
Процедура СведенияОбОрганизацииНаСервере()
//Без передачи списка показателей возвращаются все доступные значения показатели
//Если нужно значение конкретного показателя см. подробнее ЗарплатаКадрыБазовый.ПолучитьСведенияОбОрганизации
СведенияОбОрганизации = ЗарплатаКадрыБазовый.ПолучитьСведенияОбОрганизации(Объект.Организация,ТекущаяДата(), );
КонецПроцедуры
ЗапрашиваемыеЗначения = Новый Структура;
ЗапрашиваемыеЗначения.Вставить("Организация", Объект.Документ.Организация);
ЗапрашиваемыеЗначения.Вставить("Руководитель");
ЗапрашиваемыеЗначения.Вставить("ДолжностьРуководителя");
ЗапрашиваемыеЗначения.Вставить("ГлавныйБухгалтер");
ЗапрашиваемыеЗначения.Вставить("РуководительКадровойСлужбы");
ЗапрашиваемыеЗначения.Вставить("ДолжностьРуководителяКадровойСлужбы");
ДатаВЗапросОтветственных = Объект.Документ.Дата;
//!!! ПОЗВОЛЯЕТ ПОЛУЧИТЬ ДАННЫЕ ТОЛЬКО НА ДАТУ СЕАНСА
ЗарплатаКадры.ПолучитьЗначенияПоУмолчанию(ЗапрашиваемыеЗначения, ДатаВЗапросОтветственных);
ФИОГлБух = "";
Если ФизическиеЛицаЗарплатаКадры.Просклонять(ЗапрашиваемыеЗначения.ГлавныйБухгалтер.Наименование, 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
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| История.Период КАК Период,
| История.Организация КАК Организация,
| ВЫБОР
| КОГДА История.Организация = ИсторияПредыдущие.Организация
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ОрганизацияИзменена,
| История.Подразделение КАК Подразделение,
| ВЫБОР
| КОГДА История.Подразделение = ИсторияПредыдущие.Подразделение
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ПодразделениеИзменено,
| История.Должность КАК Должность,
| ВЫБОР
| КОГДА История.Должность = ИсторияПредыдущие.Должность
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ДолжностьИзменена,
| История.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| ВЫБОР
| КОГДА История.ДолжностьПоШтатномуРасписанию = ИсторияПредыдущие.ДолжностьПоШтатномуРасписанию
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ДолжностьПоШтатномуРасписаниюИзменена,
| История.КоличествоСтавок КАК КоличествоСтавок,
| ВЫБОР
| КОГДА История.КоличествоСтавок = ИсторияПредыдущие.КоличествоСтавок
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК КоличествоСтавокИзменено,
| История.ВидСобытия КАК ВидСобытия,
| История.ГрафикРаботы КАК ГрафикРаботы,
| ВЫБОР
| КОГДА История.ГрафикРаботы = ИсторияПредыдущие.ГрафикРаботы
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ГрафикРаботыИзменен,
| История.РегистраторГрафикРаботы КАК РегистраторГрафикРаботы,
| История.РегистраторКадроваяИстория КАК РегистраторКадроваяИстория
|ИЗ
| ВТИстория КАК История
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| История.Период КАК Период,
| МАКСИМУМ(ИсторияПредыдущая.Период) КАК ПериодПредыдущий
| ИЗ
| ВТИстория КАК История
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИстория КАК ИсторияПредыдущая
| ПО История.Период > ИсторияПредыдущая.Период
|
| СГРУППИРОВАТЬ ПО
| История.Период) КАК ПредыдущиеПериоды
| ЛЕВОЕ СОЕДИНЕНИЕ ВТИстория КАК ИсторияПредыдущие
| ПО ПредыдущиеПериоды.ПериодПредыдущий = ИсторияПредыдущие.Период
| ПО История.Период = ПредыдущиеПериоды.Период
|
|УПОРЯДОЧИТЬ ПО
| Период";
КадроваяИстория.Загрузить(Запрос.Выполнить().Выгрузить());
Для Каждого СтрокаКадроваяИстория Из КадроваяИстория Цикл
Если ЗначениеЗаполнено(СтрокаКадроваяИстория.РегистраторКадроваяИстория) Тогда
СтрокаКадроваяИстория.Основания.Добавить(СтрокаКадроваяИстория.РегистраторКадроваяИстория);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаКадроваяИстория.РегистраторГрафикРаботы)
И СтрокаКадроваяИстория.РегистраторГрафикРаботы <> СтрокаКадроваяИстория.РегистраторКадроваяИстория Тогда
СтрокаКадроваяИстория.Основания.Добавить(СтрокаКадроваяИстория.РегистраторГрафикРаботы);
КонецЕсли;
СтрокаКадроваяИстория.КоличествоСтавокПредставление = КадровыйУчетРасширенныйКлиентСервер.ПредставлениеКоличестваСтавок(СтрокаКадроваяИстория.КоличествоСтавок);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция РассчитатьСтажиСотрудниковЗанявшихПозиции(ПозицияШР, Должность, Подразделение, ДатаОтсчета, КатегорияДолжности, ОкладИндекс)
СтруктураДанных = Новый Структура();
СтруктураДанных.Вставить("ДатаНачала",);
СтруктураДанных.Вставить("ДатаОкончания",);
СтруктураДанных.Вставить("РазмерОклада",);
ПараметрыПолучения = ПолучитьПараметры();
ПараметрыПолучения.Организация = Отчет.Организация;
//Если ЗначениеЗаполнено(Подразделение) Тогда
// ПараметрыПолучения.Подразделение = Подразделение;
//КонецЕсли;
//Если ВключаяУволенныхНаНачалоПериода Тогда
// ПараметрыПолучения.ВключаяУволенныхНаНачалоПериода = Истина;
//КонецЕсли;
ПараметрыПолучения.НачалоПериода = НачалоМесяца(ДатаОтсчета);
ПараметрыПолучения.ОкончаниеПериода = КонецМесяца(ДатаОтсчета);
ПараметрыПолучения.ПодработкиРаботниковПоТрудовымДоговорам = Истина;
ПараметрыПолучения.РаботникиПоДоговорамГПХ = Ложь;
//ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
//ПараметрыПолучения.Отборы, "ДолжностьПоШтатномуРасписанию", "=", ПозицияШР);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
ПараметрыПолучения.Отборы, "Должность", "=", Должность);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
ПараметрыПолучения.Отборы, "Подразделение", "=", Подразделение);
ПараметрыПолучения.КадровыеДанные = "Сотрудник,ФизическоеЛицо,Подразделение,Должность,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ВидЗанятости,ДатаПриема,ДатаУвольнения";
ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения);
//ДанныеПозиции = УправлениеШтатнымРасписанием.ДанныеПозицииШтатногоРасписания(ПозицияШР, ДатаОтсчета, Истина);
ТаблицаСтажей = КадровыйУчетРасширенный.СведенияОСтажахСотрудников(ТаблицаСотрудников);
Возврат ТаблицаСтажей;
КонецФункции
//26 дней 9 месяцев 40 лет
ПредставлениеСтажа = КадровыйУчетРасширенный.ПредставлениеСтажа(СтрокаТС_Все.Дней, СтрокаТС_Все.Месяцев, СтрокаТС_Все.Лет);
//40 лет, 9 месяцев и 26 дней
ПредставлениеСтажа = ЗарплатаКадрыРасширенныйКлиентСервер.ПредставлениеСтажа(СтрокаТС_Все.Лет, СтрокаТС_Все.Месяцев, СтрокаТС_Все.Дней);
/////////////////////////
//РАСЧЕТ СТАЖА
Процедура РасчетСтажа()
ПериодРаботыЛет = 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);
// Функция определяет пол физлица по его фамилии, имени и отчеству.
// Параметр:
// ОбъектСЧастямиФИО - объект содержащий поля (реквизиты, ресурсы, свойства ...) Фамилия, Имя Отчество.
//
// Возвращаемое значение:
// ПеречислениеСсылка.ПолФизическогоЛица, Неопределено - если данных недостаточно
//
ФИОСтруктура = Новый Структура();
ФИОСтруктура.Вставить("Фамилия", Строка.Surnam);
ФИОСтруктура.Вставить("Имя", Строка.Name);
ФИОСтруктура.Вставить("Отчетсво", Строка.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
Буду очень признателен, если Вы будете делиться своим опытом и найденными процедурами и функциями.
Вступайте в нашу телеграмм-группу Инфостарт
ЗКГУ ЗУП универсальные процедуры и функции кадровые данные склонение работающие сотрудники плановые начисления средний заработок отработанное время БСП стажи сотрудников
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Зарплата Роли и права Системный администратор Бухгалтер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)
Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".
9675 руб.
27.05.2021 60620 537 129
Кадровый учет 1С:Предприятие 8 1С:Зарплата и Управление Персоналом 2.5 1С:Зарплата и Управление Персоналом 3.x Россия Управленческий учет Платные (руб)
Подключаемый модуль для миграционного учета в конфигурациях 1С:ЗУП и 1С:ЗУП КОРП, по запросу можно адаптировать под 1С:УТ и ERP. Подсистема миграционного учета содержит в себе справочники, документы, отчеты, регистры, которые позволяют вести учет патентов, хранить историю тарифов и отслеживать оплаты. Добавлена интеграция с МВД - возможность автоматической проверки сотрудников по реестру контролируемых лиц (подключение обсуждается отдельно).
52000 руб.
03.07.2025 5338 11 1
Зарплата Консолидация данных 1С:Зарплата и Управление Персоналом 3.x Россия Управленческий учет Платные (руб)
Расширение для создания и настройки обмена с консолидированной базой ЗУП. Код разработки под определенные требования проекта.
85400 руб.
11.07.2025 7147 6 1
Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Разработчик 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)
Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.
85400 руб.
05.10.2022 14576 17 8
Зарплата Производство готовой продукции (работ, услуг) Учет рабочего времени Рабочее место Аналитик Пользователь Руководитель проекта 1С:Предприятие 8 1С:Управление торговлей 10 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Торговля и склад 7.7 Бытовые услуги, сервис Оптовая торговля, дистрибуция, логистика Электротехника и микроэлектроника Управленческий учет Платные (руб)
Модуль или расширение «Сервисный центр для 1С» позволяет принимать в ремонт оборудование (компьютеры, бытовая техника и т.п.), оформлять заявки инженеров на посещение клиентов и вести начисление заработной платы для сотрудников. Позволяет наладить автоматизированный учет в сервисном центре на уже существующей базе.
15500 руб.
01.11.2012 108860 137 1
Перенос данных 1C Зарплата Бюджетный учет Разработчик Бухгалтер 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)
Обработки для быстрого перехода с конфигураций «КАМИН:Расчет зарплаты для бюджетных учреждений 3.5» и «КАМИН:Зарплата для бюджетных учреждений 5.5» на конфигурацию «Зарплата и кадры государственного учреждения».
20740 руб.
28.07.2016 73811 196 160
Зарплата Кадровый учет Бухгалтер 1С:Предприятие 8 1С:Управление нашей фирмой 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)
Предлагаем расширить возможности конфигурации 1С:УНФ 3.0 в части ведения кадрового учета. С помощью данного расширения в конфигурацию будут добавлены новые документы: "Отпуск" и "Командировка". Документы облегчат работу кадровика и расчетчика, а также повысят эффективность работы за счет оптимизации и упрощения процесса ведения учета.
36600 руб.
31.10.2024 4224 4 0
Зарплата Обмен с интернет-банком Файловый обмен (TXT, XML, DBF), FTP Печатные формы Бухгалтер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)
Выгрузка расчетных листков из 1С в банк в формате XML. Поддерживаются форматы файлов для Сбера, Альфабанка, Росбанк
6100 руб.
29.11.2021 32773 141 32
АдресСтруктура = МодульРаботаСАдресами.СведенияОбАдресе(АдресXML, ДополнительныеПараметры);а представленная выборка годна лишь для отчетов и слишком мелка, мое мнение может не совпадать с мнением... и бла бла бла
Не у всех есть огромный опыт работы с конфигурацией.
Но вы ею скорее всего не воспользуютесь, потому что гундеть на чужие статьи это одно, а написать свою это совсем другое.
Смотрю вы на ходу показания меняете, то не устраивает количество функций, а теперь уже вы беспокоитесь за качество кода.
Сначала покажите свою компетентность, а потом критикуйте других. А так получается просто троллинг. Таких умников много, только их комментарии доверия не вызывают.
Если с моим мнением кто-то не согласен, то это повод приводить контраргументы,
а не пенять на компетентность. Если бомбит - идите отчитайте своих подчиненных,
возьмите с них показания, наконец.
вот мои контраргументы:
человек постарался и выложил статью. Потратил свое свободное время на то, чтобы поделиться с другими.
Но ему пишут типа: молодец конечно, но это не то что нужно (а представленная выборка годна лишь для отчетов и слишком мелка). Это вы называете контраргументом? И где тут конструктив?
Каков итог? Он больше не будет ничего выкладывать, потому что осадок остается, и пропадает желание делиться с другими.
А мне как разработчику выгодно, чтобы появлялись такие статьи с наработками. Тем более, что у автора нет Г-кода, как вы его назвали. Лучше статьи зарабатывают высокий рейтинг и другие смогут использовать чужие наработки.
А теперь аргументируйте свое нытье. Если вы умеете рассуждать логически, то ожидаю от Вас контраргументов. А если это просто задето Ваше ЧСВ, то можете сделать из этого вывод или не сделать.
да это мое мнение, лаконичное и понятное.
И в ответ на это я не увидел никаких контраргументов от вас и попытки представить
мое мнение как нытье выглядят непорядочно и нелепо.
Добавлю, я по прежнему считаю, что копипастить методы общих модулей в некие
блокнотики - непродуктивно. Образно таких людей называют "кэп" или "Копетан Америка"
Повторю свой аргумент еще раз, если вы не внимательно читаете:
Проще изучить общие модули и освоить для себя поиск в них
- это быстрее и эффективное, чем копаться в черти чем.
ах да - это вообще смех:
Профессиональные разработчики не пятиклассницы чтобы плакать если кому-то не понравился их бант.
Профессионалы берут из критики рациональное зерно и становятся опытнее, а ваш тезис полезен для защиты профанов и халтурщиков.
Просто Ваше мнение выглядит как чуть более детальное КГАМ. Пройди Вы мимо, пользы было ровно столько же.
- Поддержал автора
- Дал обратную связь троллю, который в следующий раз возможно подумает, прежде чем критиковать других
И то и другое полезно для развития нашего с Вами сообщества.
А какой цели добились вы - решайте сами
Я для себя считаю, что сам такой формат статей полезен и его необходимо развивать. Т.к. не раз пользовался подобными статьями с Инфостарта, когда что-нибудь писал.
Поэтому я поддерживаю авторов, которые пишут в таком формате.
Кроме того, вы сами указали, что в комментариях есть более полезные (с вашей точки зрения) процедуры.
Вот только комментарии появились благодаря тому, что кто-то написал публикацию.
Если бы автор второго поста написал бы, что мол "выборка неполная, я бы еще добавил вот такую процедуру, такую и такую". И выложил свои примеры, то это был бы конструктив. Комментатору был бы респект.
Но критиковать других, не предлагая альтернативы, я считаю невежливо. Это уже не критика, а троллинг. Подобные комментарии получать к своим публикациям неприятно, и они демотивируют. Комментатор из (2) этого не понимает, т.к. он сам еще не написал ни одной статьи.
Ну и по поводу того, что нужно изучать модули - никто ж не спорит. Это приходится делать всем.
Просто некоторые процедуры приходится использовать чаще других. И подход, когда часто используемые процедуры вы ищете в своем блокноте, а не в конфигурации - экономит время. Автор вместо блокнота использует ИС, я тоже так делаю периодически.
все таки считаю, что изучать модули и функции проще и удобнее именно в дереве конфигурации.
а эту поделку можно использовать ну разве что один раз для создания реперных точек у себя в голове если вы полный новичок в конфигурации. С опытом дерево модулей удобнее.
&НаСервере
Процедура Команда1НаСервере()
ПараметрыПолученияДанных = УчетРабочегоВремениРасширенный.ПараметрыПолученияДанныхУчетаВремени();
ДатаНачала = '20181001';
ДатаОкончания = КонецМесяца(ДатаНачала);
ПараметрыПолученияДанных.ДатаНачала = ДатаНачала;
ПараметрыПолученияДанных.ДатаОкончания = ДатаОкончания;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(Справочники.Сотрудники.НайтиПоНаименованию("Иванов Иван Иванович"));
СоздатьВТСотрудники(МенеджерВременныхТаблиц, МассивСотрудников, ДатаНачала);
УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаРабочегоВремениСотрудников(МенеджерВременныхТаблиц, Истина, ПараметрыПолученияДанных);
ТЗ = МенеджерВременныхТаблиц.Таблицы.Найти("ВТДанныеУчетаРабочегоВремениСотрудников").ПолучитьДанные().Выгрузить()
КонецПроцедуры
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СоздатьВТСотрудники(МенеджерВременныхТаблиц, МассивСотрудников, Месяц, ДатаАктуальности = Неопределено, ДатаНачала = Неопределено, ДатаОкончания = Неопределено)
ТаблицаСотрудники = Новый ТаблицаЗначений;
ТаблицаСотрудники.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ТаблицаСотрудники.Колонки.Добавить("Месяц", Новый ОписаниеТипов("Дата"));
ТаблицаСотрудники.Колонки.Добавить("ДатаАктуальности", Новый ОписаниеТипов("Дата"));
ТаблицаСотрудники.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
ТаблицаСотрудники.Колонки.Добавить("ДатаОкончания", Новый ОписаниеТипов("Дата"));
Для Каждого Сотрудник Из МассивСотрудников Цикл
СтрокаСотрудники = ТаблицаСотрудники.Добавить();
СтрокаСотрудники.Сотрудник = Сотрудник;
КонецЦикла;
ТаблицаСотрудники.ЗаполнитьЗначения(Месяц, "Месяц");
ТаблицаСотрудники.ЗаполнитьЗначения(?(ДатаАктуальности = Неопределено, ТекущаяДата(), ДатаАктуальности), "ДатаАктуальности");
ТаблицаСотрудники.ЗаполнитьЗначения(?(ДатаНачала = Неопределено, Месяц, ДатаНачала), "ДатаНачала");
ТаблицаСотрудники.ЗаполнитьЗначения(?(ДатаОкончания = Неопределено, КонецМесяца(Месяц), ДатаОкончания), "ДатаОкончания");
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТаблицаСотрудники.Сотрудник,
| ТаблицаСотрудники.Месяц,
| ТаблицаСотрудники.ДатаАктуальности,
| ТаблицаСотрудники.ДатаНачала,
| ТаблицаСотрудники.ДатаОкончания
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| &ТаблицаСотрудники КАК ТаблицаСотрудники");
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТаблицаСотрудники", ТаблицаСотрудники);
Запрос.Выполнить();
КонецПроцедуры ПоказатьНапример:
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Значение); // возвращает массив с элементом = Значение
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицуИзМассива(Таблица, Массив, ИмяПоля); // добавляет в таблицу строки и заполняет поле из массива
Сотрудник в августе уходит в отпуск, (Документы Табель, и Отпуск проведен) но функционал УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаРабочегоВремениСотрудников( возвращает ЯВКУ
Параметры
ДатаНачала= 01.08.2024 0:00:00
ДатаОкончания = 31.08.2024 23:59:59
ИмяВТРезультат = "ВТДанныеУчетаРабочегоВремениСотрудников"
ИмяВТСотрудники = "ВТСотрудники"
НеучитываемыеРегистраторы = Массив (Пустой)
ПолучатьДанныеПлан = Ложь
ПолучатьУсловияТрудаИТерритории = Ложь
Хотя, должен вернуть Отпуска.
Или мои я не прав?
1. Получение среднего заработка - УчетСреднегоЗаработка.СреднийЗаработок(Сотрудник, ДатаНачалаСобытия, ДополнительныеПараметры = Неопределено);
2. Получение остатка отпусков сотрудника - ОстаткиОтпусков.ОстаткиОтпусковСотрудниковНаДату(СписокСотрудников,ДатаОтпуска,ВидыОтпусков)
В составе скрипта с помощью этих функций получал остатки отпусков сотрудников, средний заработок, сумму необходимую для начисления оценочных обязательств (в скрипте ограничение на 10 человек, потому что может долго считать). Вычисление среднего заработка слегка модифицировал, чтобы получать данные по массиву сотрудников
Скрипт запускал в этой обработке если будете запускать в своей обработке, уберите последнюю строку
ДатаОтпуска = Дата(2018,01,01);
ДатаНачала = Дата(2017,01,01);
ДатаОкончания = Дата(2017,12,31);
ИсходнаяТаблица = УчетСреднегоЗаработка.ПустаяТаблицаИсходныхДанныхРасчетаОбщегоСреднегоЗаработка();
мПараметры = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛи ц();
мПараметры.НачалоПериода = ДатаОтпуска;
мПараметры.ОкончаниеПериода = ДатаОтпуска;
мПараметры.КадровыеДанные = "Подразделение";
// 1. получаем сотрудников организации
СотрудникиОрганизации = КадровыйУчет.СотрудникиОрганизации(Истина,мПараметры);
// 2. получаем средний заработок сотрудников
СотрудникиОрганизации.Колонки.Добавить("СреднийЗаработок",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 2)));
СотрудникиОрганизации.Колонки.Добавить("ОстатокОтпуска",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(4, 0)));
СотрудникиОрганизации.Колонки.Добавить("Сумма",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 2)));
ОграничитьКоличество = 10;
// получем данные для расчета среднего
СтрокиКУдалению = Новый Массив;
Индекс = 1;
Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл
Если Индекс <= ОграничитьКоличество Тогда
СтрокаТаблицы = ИсходнаяТаблица.Добавить();
СтрокаТаблицы.Сотрудник = СтрокаСотрудник.Сотрудник;
СтрокаТаблицы.ПорядокРасчета = Перечисления.ПорядокРасчетаСреднегоЗаработкаОбщий.Постановление2010;
СтрокаТаблицы.ДатаНачалаСобытия = ДатаОтпуска;
СтрокаТаблицы.НачалоПериодаРасчетаСреднего = ДатаНачала;
СтрокаТаблицы.ОкончаниеПериодаРасчетаСреднего = ДатаОкончания;
Индекс = Индекс + 1;
Иначе
СтрокиКУдалению.Добавить(СтрокаСотрудник);
КонецЕсли;
КонецЦикла;
Для каждого пСтрока из СтрокиКУдалению Цикл
СотрудникиОрганизации.Удалить(пСтрока);
КонецЦикла;
ДанныеДляРасчета = УчетСреднегоЗаработка.ДанныеДляРасчетаОбщегоСреднегоЗаработкаСотрудников(ИсходнаяТаблица, Неопределено, Неопределено, Истина);
Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл
Отбор = Новый Структура("Сотрудник",СтрокаСотрудник.Сотрудник);
ДанныеОВремени = ДанныеДляРасчета.ДанныеОВремени;
ДанныеОНачислениях = ДанныеДляРасчета.ДанныеОНачислениях;
ДанныеОбИндексации = ДанныеДляРасчета.ДанныеОбИндексации;
ДанныеДляРасчетаСотрудник = Новый Структура("ДанныеОВремени,ДанныеОНачислениях,ДанныеОбИндексации");
ДанныеДляРасчетаСотрудник.ДанныеОВремени = ДанныеОВремени.Скопировать(ДанныеОВремени.НайтиСтроки(Отбор));
ДанныеДляРасчетаСотрудник.ДанныеОНачислениях = ДанныеОНачислениях.Скопировать(ДанныеОНачислениях.НайтиСтроки(Отбор));
ДанныеДляРасчетаСотрудник.ДанныеОбИндексации = ДанныеОбИндексации.Скопировать(ДанныеОбИндексации.НайтиСтроки(Отбор));
ДополнительныеПараметры = УчетСреднегоЗаработкаКлиентСервер.ДополнительныеПараметрыРасчетаСреднегоЗаработка();
ДополнительныеПараметры.ДатаНачалаСобытия = ДатаОтпуска;
Если Не ЗначениеЗаполнено(ДополнительныеПараметры.НачалоПериода)
Или Не ЗначениеЗаполнено(ДополнительныеПараметры.ОкончаниеПериода) Тогда
ПериодРасчета = УчетСреднегоЗаработка.ПериодРасчетаОбщегоСреднегоЗаработкаСотрудника(ДатаОтпуска, СтрокаСотрудник.Сотрудник, ДополнительныеПараметры.Начисление);
ДополнительныеПараметры.НачалоПериода = ДатаНачала;
ДополнительныеПараметры.ОкончаниеПериода = ДатаОкончания;
КонецЕсли;
Если ДополнительныеПараметры.ПорядокРасчета = Неопределено Тогда
ДополнительныеПараметры.ПорядокРасчета = УчетСреднегоЗаработкаКлиентСервер.ПорядокРасчетаОбщегоСреднегоЗаработка(ДатаОтпуска);
КонецЕсли;
ДополнительныеПараметры.ПорядокРасчета = Перечисления.ПорядокРасчетаСреднегоЗаработкаОбщий.Постановление2010;
ДополнительныеПараметры.СпособРасчетаОтпуска = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоКалендарнымДням;
ДополнительныеПараметры.Индексации = ДанныеДляРасчета.ДанныеОбИндексации;
СтрокаСотрудник.СреднийЗаработок = УчетСреднегоЗаработкаКлиентСервер.СреднийЗаработокОбщий(ДанныеДляРасчетаСотрудник.ДанныеОНачислениях, ДанныеДляРасчетаСотрудник.ДанныеОВремени, ДополнительныеПараметры);
КонецЦикла;
// 3. считаем остатки отпусков
СписокСотрудников = СотрудникиОрганизации.ВыгрузитьКолонку("Сотрудник");
ВидыОтпусков = Неопределено;
//ВидыОтпусков = Новый Массив;
//ВидыОтпусков.Добавить(Справочники.ВидыОтпусков.Основной);
ТаблицаОстаткиОтпусков = ОстаткиОтпусков.ОстаткиОтпусковСотрудниковНаДату(СписокСотрудников,ДатаОтпуска,ВидыОтпусков);
Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл
Отбор = Новый Структура("Сотрудник",СтрокаСотрудник.Сотрудник);
СтрокиОтпуска = ТаблицаОстаткиОтпусков.НайтиСтроки(Отбор);
ОстатокОтпуска = 0;
Для каждого СтрокаОтпуска из СтрокиОтпуска Цикл
ОстатокОтпуска = ОстатокОтпуска + СтрокаОтпуска.КоличествоДней;
КонецЦикла;
СтрокаСотрудник.ОстатокОтпуска = ОстатокОтпуска;
СтрокаСотрудник.Сумма = ОстатокОтпуска * СтрокаСотрудник.СреднийЗаработок;
КонецЦикла;
//СотрудникиОрганизации.Колонки.Добавить("СреднийЗаработок",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 2)));
//Сообщить(УчетСреднегоЗаработка.СреднийЗаработок(СотрудникиОрганизации[0].Сотрудник,Дата(2017,12,31)));
ЗаполнитьТаблицуЗначенийНаФорме(СотрудникиОрганизации,"ТЗ2");
ПоказатьДополнительныеПараметры.Индексации = ДанныеДляРасчетаСотрудник.ДанныеОбИндексации;У меня в организации у нескольких человек нет индексации и по "счастливому совпадению" они в списке оказывались. Долго не могла понять почему по одному сотруднику средний считается правильно, а по нескольким - средний без индексации получается.
(65) Это видимо и на Ваш вопрос ответ.
ДополнительныеПараметры.Индексации = ДанныеОбИндексации.Скопировать(ДанныеОбИндексации.НайтиСтроки(Отбор));У меня без такой доработки срелний счтался неправильно по некоторым сотрудникам.
ОтражениеЗарплатыВБухучете.СоздатьВТСведенияОБухучетеЗарплатыСотрудников();Для её использования нужно сохранить в менеджере временных таблиц таблицу сотрудников, для которых нужно получить сведения.
Ниже пример использования:
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаСотрудников.Сотрудник,
| ТаблицаСотрудников.Период,
| ТаблицаСотрудников.Подразделение
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| &ТаблицаСотрудников КАК ТаблицаСотрудников";
Запрос.УстановитьПараметр("ТаблицаСотрудников", ТаблицаСотрудников);
Запрос.Выполнить();
ОтражениеЗарплатыВБухучете.СоздатьВТСведенияОБухучетеЗарплатыСотрудников(МенеджерВременныхТаблиц, "ВТСотрудники", "Сотрудник,Период", Организация);
ПоказатьСписок параметров Общий модуль ЗарплатаКадрыБазовый Функция ПолучитьСведенияОбОрганизации(Знач Организация, Знач ДатаЗначения = Неопределено, Знач СписокПоказателей = Неопределено) Экспорт
Р.S. Автор расширяй свою статью данными из комментариев. Будет бомба)
РазмерСН = ПроцентСевернойНадбавки(Объект, ДатаПолученияДанных)Возвращает процент северной надбавки физического лица или сотрудника.
//
// Параметры:
// Объект - СправочникСсылка.Сотрудники, СправочникСсылка.ФизическиеЛица
// ДатаПолученияДанных
//
// ВозвращаемоеЗначение: Число
ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудник, ТекущаяДата(),,);
Не срабатывает, по причине того, что эта процедура не экспортная.Смотрел на 3.1.5 и 3.1.7
Или можно попробовать нечто похожее:
&НаСервере
Процедура Команда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) <= ПлановыйФОТ.ДатаОкончания
| КОНЕЦ)
|
|СГРУППИРОВАТЬ ПО
| ПериодыПолученияДвижений.Сотрудник
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ПлановыйФОТ.Период,
| ПериодыПолученияДвижений.Сотрудник,
| ВЫБОР
| КОГДА ПлановыйФОТ.ДатаОкончания > ПериодыПолученияДвижений.ДатаНачала
| ТОГДА &МаксимальнаяДата
| ИНАЧЕ ПлановыйФОТ.ДатаОкончания
| КОНЕЦ КАК ДатаОкончания,
| ПлановыйФОТ.Начисление,
| ПлановыйФОТ.ФизическоеЛицо,
| ПлановыйФОТ.ДокументОснование,
| ПлановыйФОТ.ГоловнаяОрганизация,
| ПлановыйФОТ.Год,
| ПлановыйФОТ.ВкладВФОТ,
| ПлановыйФОТ.ПересчетНеТребуется,
| ПлановыйФОТ.ВторичнаяЗапись,
| ПлановыйФОТ.РегистраторСобытия КАК РегистраторСобытия,
| ПлановыйФОТ.ПериодПредыдущейЗаписи,
| ПлановыйФОТ.Используется,
| ВЫБОР
| КОГДА НЕ ПлановыйФОТ.Период ЕСТЬ NULL
| И ПериодыПолученияДвижений.ДатаНачала > ПлановыйФОТ.Период
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК АктуальнаяЗапись
|ИЗ
| ВТПериодыПолученияПлановогоФОТ КАК ПериодыПолученияДвижений
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыйФОТ КАК ПлановыйФОТ
| ПО ПериодыПолученияДвижений.Сотрудник = ПлановыйФОТ.Сотрудник
| И ПериодыПолученияДвижений.Год <= ПлановыйФОТ.Год";
ТЗ = Запрос.Выполнить().Выгрузить();
КонецПроцедуры
ПоказатьФункция ПолучитьСведенияОбОрганизации
Здесь можно найти все возможные показатели организации:
Если СписокПоказателей = Неопределено Тогда
СписокПоказателей = Новый Массив;
СписокПоказателей.Добавить("ТипНП");
СписокПоказателей.Добавить("КатНП");
СписокПоказателей.Добавить("КодНО");
СписокПоказателей.Добавить("ОснВидДеят");
СписокПоказателей.Добавить("ОКВЭД");
СписокПоказателей.Добавить("ОснВидДеят2");
СписокПоказателей.Добавить("ОКВЭД2");
СписокПоказателей.Добавить("ОГРН");
СписокПоказателей.Добавить("ОКАТО");
СписокПоказателей.Добавить("ОКТМО");
СписокПоказателей.Добавить("РегНомПФР");
СписокПоказателей.Добавить("ОКПО");
СписокПоказателей.Добавить("ОКФС");
СписокПоказателей.Добавить("ДатаРегистрации");
СписокПоказателей.Добавить("АдрПочт");
СписокПоказателей.Добавить("АдрПочт_XML");
СписокПоказателей.Добавить("СвидСН");
СписокПоказателей.Добавить("СвидНО");
СписокПоказателей.Добавить("СвидНОКод");
СписокПоказателей.Добавить("НаимНО");
СписокПоказателей.Добавить("НаимЮЛПол");
СписокПоказателей.Добавить("НаимЮЛСокр");
СписокПоказателей.Добавить("ИННЮЛ");
СписокПоказателей.Добавить("КППЮЛ");
СписокПоказателей.Добавить("АдрЮР");
СписокПоказателей.Добавить("АдрЮР_XML");
СписокПоказателей.Добавить("ПолныйАдрЮР");
СписокПоказателей.Добавить("АдрФакт");
СписокПоказателей.Добавить("АдрФакт_XML");
СписокПоказателей.Добавить("ОргИндекс");
СписокПоказателей.Добавить("ОргСубъект");
СписокПоказателей.Добавить("ОргКодСубъект");
СписокПоказателей.Добавить("ОргРайон");
СписокПоказателей.Добавить("ОргГород");
СписокПоказателей.Добавить("ОргНПункт");
СписокПоказателей.Добавить("ОргУлица");
СписокПоказателей.Добавить("ОргДом");
СписокПоказателей.Добавить("ОргКорпус");
СписокПоказателей.Добавить("ОргКвартира");
СписокПоказателей.Добавить("НаимОППол");
СписокПоказателей.Добавить("КППОП");
СписокПоказателей.Добавить("АдрОП");
СписокПоказателей.Добавить("АдрОП_XML");
СписокПоказателей.Добавить("ИндексОП");
СписокПоказателей.Добавить("СубъектОП");
СписокПоказателей.Добавить("КодСубъектОП");
СписокПоказателей.Добавить("РайонОП");
СписокПоказателей.Добавить("ГородОП");
СписокПоказателей.Добавить("НПунктОП");
СписокПоказателей.Добавить("УлицаОП");
СписокПоказателей.Добавить("ДомОП");
СписокПоказателей.Добавить("КорпусОП");
СписокПоказателей.Добавить("КвартираОП");
СписокПоказателей.Добавить("ФИО");
СписокПоказателей.Добавить("ФамилияИП");
СписокПоказателей.Добавить("ИмяИП");
СписокПоказателей.Добавить("ОтчествоИП");
СписокПоказателей.Добавить("ФИООтпрФЛ");
СписокПоказателей.Добавить("ИННФЛ");
СписокПоказателей.Добавить("СНИЛС");
СписокПоказателей.Добавить("ДатаРожд");
СписокПоказателей.Добавить("МестоРожд");
СписокПоказателей.Добавить("Пол");
СписокПоказателей.Добавить("Гражд");
СписокПоказателей.Добавить("ГраждСтрана");
СписокПоказателей.Добавить("КодУдЛичн");
СписокПоказателей.Добавить("ВидУдЛичн");
СписокПоказателей.Добавить("ОрганВыданУдЛичн");
СписокПоказателей.Добавить("КодПодрУдЛичн");
СписокПоказателей.Добавить("СерияУдЛичн");
СписокПоказателей.Добавить("НомерУдЛичн");
СписокПоказателей.Добавить("ДатаУдЛичн");
СписокПоказателей.Добавить("АдрПрописки");
СписокПоказателей.Добавить("АдрПрописки_XML");
СписокПоказателей.Добавить("АдрМЖ");
СписокПоказателей.Добавить("АдрМЖ_XML");
СписокПоказателей.Добавить("ИндексМЖ");
СписокПоказателей.Добавить("СубъектМЖ");
СписокПоказателей.Добавить("КодСубъектМЖ");
СписокПоказателей.Добавить("РайонМЖ");
СписокПоказателей.Добавить("ГородМЖ");
СписокПоказателей.Добавить("НПунктМЖ");
СписокПоказателей.Добавить("УлицаМЖ");
СписокПоказателей.Добавить("ДомМЖ");
СписокПоказателей.Добавить("КорпусМЖ");
СписокПоказателей.Добавить("КвартираМЖ");
СписокПоказателей.Добавить("ТелСлуж");
СписокПоказателей.Добавить("ТелДом");
СписокПоказателей.Добавить("ФИОРук");
СписокПоказателей.Добавить("ФамилияРук");
СписокПоказателей.Добавить("ИмяРук");
СписокПоказателей.Добавить("ОтчествоРук");
СписокПоказателей.Добавить("ИННРук");
СписокПоказателей.Добавить("ДатаРождРук");
СписокПоказателей.Добавить("МестоРождРук");
СписокПоказателей.Добавить("ПолРук");
СписокПоказателей.Добавить("ГраждРук");
СписокПоказателей.Добавить("ГраждСтранаРук");
СписокПоказателей.Добавить("ТелРук");
СписокПоказателей.Добавить("ДолжнРук");
СписокПоказателей.Добавить("КодУдЛичнРук");
СписокПоказателей.Добавить("ВидУдЛичнРук");
СписокПоказателей.Добавить("ОрганВыданУдЛичнРук");
СписокПоказателей.Добавить("КодПодрУдЛичнРук");
СписокПоказателей.Добавить("СерияУдЛичнРук");
СписокПоказателей.Добавить("НомерУдЛичнРук");
СписокПоказателей.Добавить("ДатаУдЛичнРук");
СписокПоказателей.Добавить("АдрМЖРукРФ");
СписокПоказателей.Добавить("АдрМЖРукРФ_XML");
СписокПоказателей.Добавить("ИндексМЖРук");
СписокПоказателей.Добавить("СубъектМЖРук");
СписокПоказателей.Добавить("КодСубъектМЖРук");
СписокПоказателей.Добавить("РайонМЖРук");
СписокПоказателей.Добавить("ГородМЖРук");
СписокПоказателей.Добавить("НПунктМЖРук");
СписокПоказателей.Добавить("УлицаМЖРук");
СписокПоказателей.Добавить("ДомМЖРук");
СписокПоказателей.Добавить("КорпусМЖРук");
СписокПоказателей.Добавить("КвартираМЖРук");
СписокПоказателей.Добавить("ФИООтпр");
СписокПоказателей.Добавить("ФИОБух");
СписокПоказателей.Добавить("ФамилияБух");
СписокПоказателей.Добавить("ИмяБух");
СписокПоказателей.Добавить("ОтчествоБух");
СписокПоказателей.Добавить("ИННБух");
СписокПоказателей.Добавить("ДатаРождБух");
СписокПоказателей.Добавить("МестоРождБух");
СписокПоказателей.Добавить("ПолБух");
СписокПоказателей.Добавить("ПолУпПред");
СписокПоказателей.Добавить("ГраждБух");
СписокПоказателей.Добавить("ГраждУпПред");
СписокПоказателей.Добавить("ГраждСтранаБух");
СписокПоказателей.Добавить("ГраждСтранаУпПред");
СписокПоказателей.Добавить("ТелБух");
СписокПоказателей.Добавить("ТелОтпр");
СписокПоказателей.Добавить("КодУдЛичнБух");
СписокПоказателей.Добавить("ВидУдЛичнБух");
СписокПоказателей.Добавить("ОрганВыданУдЛичнБух");
СписокПоказателей.Добавить("КодПодрУдЛичнБух");
СписокПоказателей.Добавить("СерияУдЛичнБух");
СписокПоказателей.Добавить("НомерУдЛичнБух");
СписокПоказателей.Добавить("ДатаУдЛичнБух");
СписокПоказателей.Добавить("АдрМЖБухРФ");
СписокПоказателей.Добавить("АдрМЖБухРФ_XML");
СписокПоказателей.Добавить("ИндексМЖБух");
СписокПоказателей.Добавить("СубъектМЖБух");
СписокПоказателей.Добавить("КодСубъектМЖБух");
СписокПоказателей.Добавить("РайонМЖБух");
СписокПоказателей.Добавить("ГородМЖБух");
СписокПоказателей.Добавить("НПунктМЖБух");
СписокПоказателей.Добавить("УлицаМЖБух");
СписокПоказателей.Добавить("ДомМЖБух");
СписокПоказателей.Добавить("КорпусМЖБух");
СписокПоказателей.Добавить("КвартираМЖБух");
СписокПоказателей.Добавить("ФИОУпПред");
СписокПоказателей.Добавить("ИННУпПред");
СписокПоказателей.Добавить("ТелУпПред");
СписокПоказателей.Добавить("КодУдЛичнУпПред");
СписокПоказателей.Добавить("ВидУдЛичнУпПред");
СписокПоказателей.Добавить("ОрганВыданУдЛичнУпПред");
СписокПоказателей.Добавить("СерияУдЛичнУпПред");
СписокПоказателей.Добавить("НомерУдЛичнУпПред");
СписокПоказателей.Добавить("ДатаУдЛичнУпПред");
СписокПоказателей.Добавить("ДатаРождУпПред");
СписокПоказателей.Добавить("АдрМЖУпПредРФ");
СписокПоказателей.Добавить("АдрМЖУпПредРФ_XML");
СписокПоказателей.Добавить("МестоРождУпПред");
СписокПоказателей.Добавить("ИндексМЖУпПред");
СписокПоказателей.Добавить("СубъектМЖУпПред");
СписокПоказателей.Добавить("КодСубъектМЖУпПред");
СписокПоказателей.Добавить("РайонМЖУпПред");
СписокПоказателей.Добавить("ГородМЖУпПред");
СписокПоказателей.Добавить("НПунктМЖУпПред");
СписокПоказателей.Добавить("УлицаМЖУпПред");
СписокПоказателей.Добавить("ДомМЖУпПред");
СписокПоказателей.Добавить("КорпусМЖУпПред");
СписокПоказателей.Добавить("КвартираМЖУпПред");
СписокПоказателей.Добавить("ФаксИсп");
СписокПоказателей.Добавить("ДолжнОтпр");
СписокПоказателей.Добавить("ДатаПереходаНаУСН");
СписокПоказателей.Добавить("БанкСчетНомер");
СписокПоказателей.Добавить("БанкСчетНаимБанка");
СписокПоказателей.Добавить("БанкСчетКоррСчетБанка");
СписокПоказателей.Добавить("БанкСчетБИКБанка");
СписокПоказателей.Добавить("РегистрационныйНомерФСС");
СписокПоказателей.Добавить("КодПодчиненностиФСС");
СписокПоказателей.Добавить("СтраховойТариф");
СписокПоказателей.Добавить("ТелОрганизации");
СписокПоказателей.Добавить("ФаксОрганизации");
СписокПоказателей.Добавить("ОбъектНалогообложенияУСН");
СписокПоказателей.Добавить("НаимГоловнОрг");
СписокПоказателей.Добавить("КППГоловнОрг");
СписокПоказателей.Добавить("ФИОИсп");
СписокПоказателей.Добавить("ДолжнИсп");
СписокПоказателей.Добавить("ТелИсп");
СписокПоказателей.Добавить("АдресЭлПочтыИсп");
СписокПоказателей.Добавить("КодОрганаПФР");
СписокПоказателей.Добавить("АдресЭлектроннойПочтыОрганизации");
СписокПоказателей.Добавить("КодПодчФССДобрСтрах");
СписокПоказателей.Добавить("ШифрСтрахователяФСС");
СписокПоказателей.Добавить("СистемыНалогообложения");
СписокПоказателей.Добавить("ВидПлательщикаСтраховыхВзносов");
СписокПоказателей.Добавить("КодТарифаПлательщикаПоУмолчаниюДляРСВ");
СписокПоказателей.Добавить("КодОрганаФСГС");
Этими запросами часть данных берется из уже начисленных документов, а часть из документа начисления, а затем все это объединятся в одну таблицу.
Думал, есть готовая ф-ия по типу указанных в публикации, было бы удобно.
Например, почему-то они ликвидировали функцию ДанныеТрудовыхДоговоров из общего модуля КадровыйУчет.
Да не только разработчики ЗУП.. В той же КА/ЕРП/УТ толком пользоваться ИХ АПИ для себя в долгосрочной перспективе всегда ведет к тому, что они что-нибудь переименуют/исправят ошибку в названии функции/ поменяют формат входных данных..
Но с другой стороны - рисовать свои функции может быть еще хуже, ибо можно что-то не учесть в расчетах, это раз. А два - все равно метаданные/алгоритмы будут меняться, и вероятность того, что свой код станет не рабочим не меньше той, что нерабочим станет код с использованием типовых процедур..
&НаСервереБезКонтекста
Процедура ПолучитьДанныеНачисленийНаСервере(МассивСотрудников, ДатаНачала, ДатаОкончания, Организация)
ДополнительныеПараметры = РасчетЗарплатыРасширенный.ДополнительныеПараметрыЗаполненияТаблицДокумента();
ДополнительныеПараметры.Сотрудники = МассивСотрудников;
ДополнительныеПараметры.ОкончаниеПериода = ДатаОкончания;
ДополнительныеПараметры.РежимНачисления = Перечисления.РежимНачисленияЗарплаты.ОкончательныйРасчет;
ПараметрыОписания = Новый Структура;
ПараметрыОписания.Вставить("ИзменениеБезОграничений" ,Истина);
ПараметрыОписания.Вставить("РегистрацияНачисленийДоступна", Истина);
ПараметрыОписания.Вставить("СпособыРасчетаСреднегоЗаработка", Неопределено);
ПараметрыОписания.Вставить("ПризнакКомпенсацииУдержанияОтпуска", Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.НеИспользовать);
ОписаниеДокумента = КадровыйУчетРасширенныйКлиентСервер.ОписаниеДокумента(ПараметрыОписания);
ДанныеНачислений = РасчетЗарплатыРасширенный.ДанныеДляЗаполненияТаблицДокумента(ОписаниеДокумента, Организация, ДатаНачала, ДополнительныеПараметры);
КонецПроцедуры Показать
перестала работать
Процедура ПолучитьДанныеНачисленийНаСервере(МассивСотрудников, ДатаНачала, ДатаОкончания, Организация)
Выдает пустые таблицы
УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаРабочегоВремениСотрудников(МенеджерВременныхТаблиц, Истина, ПараметрыПолученияДанных);Возвращает таблицу с "плановым" временем по графику, т.е. как сотрудник работал, если бы ничего не происходило. Отклонения (отпуска, болезни и т.д.) не учитываются.
Для получения фактических данных использовал процедуру
УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников(МенеджерВременныхТаблиц, Истина, ПараметрыЗаполнения);Параметр "ПараметрыЗаполнения" определяется тут:
УчетРабочегоВремениРасширенный.ПараметрыДляЗапросВТДанныеУчетаВремениИСостоянийСотрудников();Релиз 3.1.9.159
&НаСервере
Процедура Команда1НаСервере()
ПараметрыПолученияДанных = УчетРабочегоВремениРасширенный.ПараметрыДляЗапросВТДанныеУчетаВремениИСостоянийСотрудников();
ПараметрыПолученияДанных.ДатаНачала = Период.ДатаНачала;
ПараметрыПолученияДанных.ДатаОкончания = Период.ДатаОкончания;
ПараметрыПолученияДанных.МесяцДатаНачала = Период.ДатаНачала;
ПараметрыПолученияДанных.МесяцДатаОкончания = Период.ДатаОкончания;
ПараметрыПолученияДанных.ДатаАктуальности = ТекущаяДата();
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
СоздатьВТСотрудники(МенеджерВременныхТаблиц, СписокСотрудников.ВыгрузитьЗначения(), Период.ДатаНачала, Период.ДатаОкончания);
УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников(МенеджерВременныхТаблиц, Истина, ПараметрыПолученияДанных);
ТЗ = МенеджерВременныхТаблиц.Таблицы.Найти("ВТДанныеУчетаВремениИСостоянийСотрудников").ПолучитьДанные().Выгрузить();
ТЗ.Сортировать("Дата");
КонецПроцедуры
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СоздатьВТСотрудники(МенеджерВременныхТаблиц, МассивСотрудников, ДатаНачала, ДатаОкончания)
ТаблицаСотрудники = Новый ТаблицаЗначений;
ТаблицаСотрудники.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ТаблицаСотрудники.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
ТаблицаСотрудники.Колонки.Добавить("ДатаОкончания", Новый ОписаниеТипов("Дата"));
Для Каждого Сотрудник Из МассивСотрудников Цикл
СтрокаСотрудники = ТаблицаСотрудники.Добавить();
СтрокаСотрудники.Сотрудник = Сотрудник;
КонецЦикла;
ТаблицаСотрудники.ЗаполнитьЗначения(ДатаНачала, "ДатаНачала");
ТаблицаСотрудники.ЗаполнитьЗначения(ДатаОкончания, "ДатаОкончания");
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТаблицаСотрудники.Сотрудник,
| ТаблицаСотрудники.ДатаНачала,
| ТаблицаСотрудники.ДатаОкончания
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| &ТаблицаСотрудники КАК ТаблицаСотрудники");
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТаблицаСотрудники", ТаблицаСотрудники);
Запрос.Выполнить();
КонецПроцедуры ПоказатьВТСотрудники
ВТПериодыРаботыСотрудников
ВТМесяцы
ВТСотрудникиМесяцы
ВТПериодыДействияГрафиковДляКалендарей
ВТСоответствиеСостоянийВидамУчетаВремени
ВТДатыСостояний
ВТПараметрыЗарегистрированныхДанныхУчетаВремени
ВТСотрудникСРассчитаннымиДанными
ВТПараметрыПолученияДанныхПоСотрудникам
ВТЗарегистрированныеВидыДанныхУчетаВремени
ВТИспользуемыеВидыДанных
ВТВытесняющиеВидыДанных
ВТВспомогательнаяТаблицаОпределенияУстановленныхДнейПериода
ВТИспользуемыеИсточникиДанныхНеотфильтрованные
ВТИсточникиПолученияДанныхУчетаВремени
ВТИзмеренияДатыДляСрезаГрафиков
ВТГрафикРаботыСотрудниковСрезПоследних
ВТГрафикРаботыСотрудниковСрезПервых
ВТГрафикРаботыСотрудников
ВТГрафикРаботыСотрудниковСрезПоследнихДополненный
ВТГрафикиСотрудниковСрезИДвижения
ВТИнтервалыГрафиков
ВТПериодыДейсвияОбщихГрафиковСотрудников
ВТОбщиеГрафики
ВТДанныеОбщихГрафиков
ВТДанныеРегистровУчетаВремени
ВТНормаВремени
ВТДанныеУчетаРабочегоВремениСотрудников
ВТСостоянияСотрудников
ВТДанныеУчетаВремениПоСостояниям
ВТДанныеУчетаВремениИСостоянийСотрудников
ПараметрыПолученияДанных.МесяцДатаНачала = Период.ДатаНачала;Дополню важный нюанс, если запрашиваете данные за произвольный период, тогда необходимо указать начало месяца в МесяцДатаНачала, иначе данные за неполный месяц начала посчитаны не будут. Однако дата переданная в МесяцДатаОкончания произвольным числом даст итоги по неполному месяцу.
ПараметрыПолученияДанных.ДатаНачала = Период.ДатаНачала //Оставляем без изменений
ПараметрыПолученияДанных.МесяцДатаНачала = НачалоМесяца(Период.ДатаНачала);
------
Версия ЗКГУ 3.1.9.205
Там вроде в параметрах можно отключить факт и указать "= Истина" только плановые данные. и получить по всем датам. А потом уже с новым регистром соединить.
Спасибо. Я в общих модулях смотрел. Вроде все совпадает по коду.
ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения);работает некорректно в случае, если в регистре сведений "Данные для подбора сотрудников" нет записи с видом события "Увольнение" по сотруднику, который по факту уволен. У нас такие сотрудники вылезли после переноса из старой базы (думается мне, что была кривая обработка по переносу).
В этом случае данный сотрудник будет считаться трудоустроенным.
Также данного сотрудника нельзя будет выбрать, например, в расчетном листке, если указана организация. База просто не видит этого сотрудника.
Релиз 3.1.9.187. Получение действующих плановых начислений для списка сотрудников не сработает, т.к. функция не экспортная.
ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудник, ТекущаяДата(),,);Меня интересует, можно ли получить её с помощью типовых функций. Мы же теперь вроде как API используем?
&НаСервере
Процедура СформироватьКадровуюИсторию()
КадроваяИстория.Очистить();
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Измерения = Новый ТаблицаЗначений;
Измерения.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
Измерения.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
Измерения.Колонки.Добавить("ДатаОкончания", Новый ОписаниеТипов("Дата"));
СтрокаИзмерения = Измерения.Добавить();
СтрокаИзмерения.Сотрудник = СсылкаНаСотрудника;
СтрокаИзмерения.ДатаОкончания = КонецГода(ТекущаяДатаСеанса());
ПараметрыПостроения = ЗарплатаКадрыОбщиеНаборыДанных.ПараметрыПостроенияДляСоздатьВТИмяРегистра();
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
ПараметрыПостроения.Отборы, "ВидСобытия", "<>", Перечисления.ВидыКадровыхСобытий.НеподтвержденныеДанные);
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистра(
"КадроваяИсторияСотрудников",
Запрос.МенеджерВременныхТаблиц,
Истина,
ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра(Измерения),
ПараметрыПостроения);
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистра(
"ГрафикРаботыСотрудников",
Запрос.МенеджерВременныхТаблиц,
Истина,
ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра(Измерения));
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| КадроваяИсторияСотрудников.Период КАК Период
|ПОМЕСТИТЬ ВТПериоды
|ИЗ
| ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ГрафикРаботыСотрудников.Период
|ИЗ
| ВТГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| Периоды.Период КАК Период,
| МАКСИМУМ(ГрафикРаботыСотрудников.Период) КАК ПериодГрафикиРаботы,
| МАКСИМУМ(КадроваяИсторияСотрудников.Период) КАК ПериодКадроваяИстория
|ПОМЕСТИТЬ ВТПериодыИстории
|ИЗ
| ВТПериоды КАК Периоды
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
| ПО Периоды.Период >= КадроваяИсторияСотрудников.Период
| ЛЕВОЕ СОЕДИНЕНИЕ ВТГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
| ПО Периоды.Период >= ГрафикРаботыСотрудников.Период
|
|СГРУППИРОВАТЬ ПО
| Периоды.Период
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ПериодыИстории.Период КАК Период,
| КадроваяИсторияСотрудников.Организация КАК Организация,
| КадроваяИсторияСотрудников.Подразделение КАК Подразделение,
| КадроваяИсторияСотрудников.Должность КАК Должность,
| КадроваяИсторияСотрудников.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| КадроваяИсторияСотрудников.КоличествоСтавок КАК КоличествоСтавок,
| КадроваяИсторияСотрудников.ВидСобытия КАК ВидСобытия,
| ГрафикРаботыСотрудников.ГрафикРаботы КАК ГрафикРаботы,
| ВЫБОР
| КОГДА ПериодыИстории.Период = ГрафикРаботыСотрудников.Период
| ТОГДА ГрафикРаботыСотрудников.Регистратор
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК РегистраторГрафикРаботы,
| ВЫБОР
| КОГДА ПериодыИстории.Период = КадроваяИсторияСотрудников.Период
| ТОГДА КадроваяИсторияСотрудников.Регистратор
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК РегистраторКадроваяИстория
|ПОМЕСТИТЬ ВТИстория
|ИЗ
| ВТПериодыИстории КАК ПериодыИстории
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
| ПО ПериодыИстории.ПериодКадроваяИстория = КадроваяИсторияСотрудников.Период
| ЛЕВОЕ СОЕДИНЕНИЕ ВТГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
| ПО ПериодыИстории.ПериодГрафикиРаботы = ГрафикРаботыСотрудников.Период
|ГДЕ
| НЕ ПериодыИстории.ПериодКадроваяИстория ЕСТЬ NULL
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| История.Период КАК Период,
| История.Организация КАК Организация,
| ВЫБОР
| КОГДА История.Организация = ИсторияПредыдущие.Организация
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ОрганизацияИзменена,
| История.Подразделение КАК Подразделение,
| ВЫБОР
| КОГДА История.Подразделение = ИсторияПредыдущие.Подразделение
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ПодразделениеИзменено,
| История.Должность КАК Должность,
| ВЫБОР
| КОГДА История.Должность = ИсторияПредыдущие.Должность
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ДолжностьИзменена,
| История.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
| ВЫБОР
| КОГДА История.ДолжностьПоШтатномуРасписанию = ИсторияПредыдущие.ДолжностьПоШтатномуРасписанию
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ДолжностьПоШтатномуРасписаниюИзменена,
| История.КоличествоСтавок КАК КоличествоСтавок,
| ВЫБОР
| КОГДА История.КоличествоСтавок = ИсторияПредыдущие.КоличествоСтавок
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК КоличествоСтавокИзменено,
| История.ВидСобытия КАК ВидСобытия,
| История.ГрафикРаботы КАК ГрафикРаботы,
| ВЫБОР
| КОГДА История.ГрафикРаботы = ИсторияПредыдущие.ГрафикРаботы
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ГрафикРаботыИзменен,
| История.РегистраторГрафикРаботы КАК РегистраторГрафикРаботы,
| История.РегистраторКадроваяИстория КАК РегистраторКадроваяИстория
|ИЗ
| ВТИстория КАК История
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| История.Период КАК Период,
| МАКСИМУМ(ИсторияПредыдущая.Период) КАК ПериодПредыдущий
| ИЗ
| ВТИстория КАК История
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИстория КАК ИсторияПредыдущая
| ПО История.Период > ИсторияПредыдущая.Период
|
| СГРУППИРОВАТЬ ПО
| История.Период) КАК ПредыдущиеПериоды
| ЛЕВОЕ СОЕДИНЕНИЕ ВТИстория КАК ИсторияПредыдущие
| ПО ПредыдущиеПериоды.ПериодПредыдущий = ИсторияПредыдущие.Период
| ПО История.Период = ПредыдущиеПериоды.Период
|
|УПОРЯДОЧИТЬ ПО
| Период";
КадроваяИстория.Загрузить(Запрос.Выполнить().Выгрузить());
Для Каждого СтрокаКадроваяИстория Из КадроваяИстория Цикл
Если ЗначениеЗаполнено(СтрокаКадроваяИстория.РегистраторКадроваяИстория) Тогда
СтрокаКадроваяИстория.Основания.Добавить(СтрокаКадроваяИстория.РегистраторКадроваяИстория);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаКадроваяИстория.РегистраторГрафикРаботы)
И СтрокаКадроваяИстория.РегистраторГрафикРаботы <> СтрокаКадроваяИстория.РегистраторКадроваяИстория Тогда
СтрокаКадроваяИстория.Основания.Добавить(СтрокаКадроваяИстория.РегистраторГрафикРаботы);
КонецЕсли;
СтрокаКадроваяИстория.КоличествоСтавокПредставление = КадровыйУчетРасширенныйКлиентСервер.ПредставлениеКоличестваСтавок(СтрокаКадроваяИстория.КоличествоСтавок);
КонецЦикла;
КонецПроцедуры
ПоказатьПараметрыПолучения.КадровыеДанные = "Сотрудник,ФизическоеЛицо,Подразделение,Должность,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ВидЗанятости,ДатаПриема,ДатаУвольнения,ГрафикРаботы";Сотрудник и ФизическоеЛицо можно убрать, т.к. это "предопределенные" колонки в возвращаемой ТЗ. Если оставить как есть, то в ТЗ будут колонки Сотрудник, ФизическоеЛицо, Сотрудник1, ФизическоеЛицо1.
Функция для расчета количества полных месяцев стажа по трудовой книжке:
Функция ПолучитьНепрерывныйСтажНадбавку(Сотрудник, ДатаПеревода)
ПолныхМесяцевСтажаПоДатуПеревода = 0;
НадбавкаЗаСтаж = 0;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СтажиФизическихЛицСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,
| СтажиФизическихЛицСрезПоследних.ВидСтажа КАК ВидСтажа,
| СтажиФизическихЛицСрезПоследних.ДатаОтсчета КАК ДатаОтсчета,
| СУММА(СтажиФизическихЛицСрезПоследних.РазмерМесяцев) КАК РазмерМесяцев,
| СУММА(СтажиФизическихЛицСрезПоследних.РазмерДней) КАК РазмерДней,
| СтажиФизическихЛицСрезПоследних.ИсчисляетсяСДатыПриема КАК ИсчисляетсяСДатыПриема
|ИЗ
| РегистрСведений.СтажиФизическихЛиц.СрезПоследних(&Дата, ) КАК СтажиФизическихЛицСрезПоследних
|ГДЕ
| СтажиФизическихЛицСрезПоследних.ФизическоеЛицо = &ФизическоеЛицо
|
|СГРУППИРОВАТЬ ПО
| СтажиФизическихЛицСрезПоследних.ВидСтажа,
| СтажиФизическихЛицСрезПоследних.ФизическоеЛицо,
| СтажиФизическихЛицСрезПоследних.ДатаОтсчета,
| СтажиФизическихЛицСрезПоследних.ИсчисляетсяСДатыПриема";
//Запрос.УстановитьПараметр("ВидСтажа", ВидСтажа);
Запрос.УстановитьПараметр("ФизическоеЛицо", Сотрудник.ФизическоеЛицо);
Запрос.УстановитьПараметр("Дата", ДатаПеревода);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ТаблицаМедицинскихСтажей = Новый ТаблицаЗначений;
ТаблицаМедицинскихСтажей.Колонки.Добавить("ДатаОтсчета");
ТаблицаМедицинскихСтажей.Колонки.Добавить("РазмерМесяцев");
ТаблицаМедицинскихСтажей.Колонки.Добавить("РазмерДней");
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если СтрНайти(ВРЕГ(ВыборкаДетальныеЗаписи.ВидСтажа), "МЕДИЦИНСКИЙ СТАЖ")>0 Тогда
СтрокаМедстаж = ТаблицаМедицинскихСтажей.Добавить();
СтрокаМедстаж.ДатаОтсчета = ВыборкаДетальныеЗаписи.ДатаОтсчета;
СтрокаМедстаж.РазмерМесяцев = ВыборкаДетальныеЗаписи.РазмерМесяцев;
СтрокаМедстаж.РазмерДней = ВыборкаДетальныеЗаписи.РазмерДней;
КонецЕсли;
КонецЦикла;
Если ТаблицаМедицинскихСтажей.Количество() = 1 Тогда
ДатаНачалоСтаж = ДобавитьМесяц(ТаблицаМедицинскихСтажей[0].ДатаОтсчета, -ТаблицаМедицинскихСтажей[0].РазмерМесяцев);
ДатаНачалоСтаж = НачалоДня(ДатаНачалоСтаж) - ТаблицаМедицинскихСтажей[0].РазмерДней*24*60*60;
Если ДатаПеревода > ДатаНачалоСтаж Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РАЗНОСТЬДАТ(&ДатаНачалоСтаж, &ДатаПеревода, МЕСЯЦ) КАК Поле1";
Запрос.УстановитьПараметр("ДатаНачалоСтаж", ДатаНачалоСтаж);
Запрос.УстановитьПараметр("ДатаПеревода", ДатаПеревода);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ПолныхМесяцевСтажаПоДатуПеревода = ВыборкаДетальныеЗаписи.Поле1;
КонецЦикла;
ДатаПереводаДень = День(ДатаПеревода);
ДатаНачалоСтажаДень = День(ДатаНачалоСтаж);
Если ДатаПереводаДень < ДатаНачалоСтажаДень Тогда
ПолныхМесяцевСтажаПоДатуПеревода = ПолныхМесяцевСтажаПоДатуПеревода - 1;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТаблицаМедицинскихСтажей.Количество()>1 Тогда
Сообщить("У данного сотрудника, зафиксированны более чем 1 запись медицинского стажа, обратитесь к администратору");
КонецЕсли;
Если ПолныхМесяцевСтажаПоДатуПеревода>=36 И ПолныхМесяцевСтажаПоДатуПеревода<60 Тогда
НадбавкаЗаСтаж = 20;
ИначеЕсли ПолныхМесяцевСтажаПоДатуПеревода>=60 Тогда
НадбавкаЗаСтаж = 30;
Иначе
НадбавкаЗаСтаж = 0;
КонецЕсли;
Возврат НадбавкаЗаСтаж;
КонецФункции ПоказатьАнализНачисленийИУдержаний = Отчеты.АнализНачисленийИУдержаний.Создать();
ДополнительныеПоля = АнализНачисленийИУдержаний.ДополнительныеПоляПредставлений();
// Удаляем из ДополнительныеПоля все, кроме нужных (в данном случае это ДолжностьПоШтатномуРасписанию)
ТЗ = ДополнительныеПоля.Представления_КадровыеДанныеСотрудниковАнализНачисленийИУдер жаний;
Для Индекс = -ТЗ.Количество()+1 По 0 Цикл
Если ТЗ[-Индекс].ИмяПоля <> "ДолжностьПоШтатномуРасписанию" Тогда
ТЗ.Удалить(-Индекс);
КонецЕсли;
КонецЦикла;
ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(АнализНачисленийИУдержаний, ДополнительныеПоля);
АнализНачисленийИУдержаний.ИнициализироватьОтчет();
// Удаляем лишние отборы
ТекстЗапроса = АнализНачисленийИУдержаний.СхемаКомпоновкиДанных.НаборыДанных.НачисленияУдержанияОбъединенные.Элементы.НачисленияУдержания.Запрос;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И НЕ ВзаиморасчетыССотрудниками.Регистратор В (&ИсключаемыеСсылки)", "");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И НЕ НачисленияИУдержания.Регистратор В (&ИсключаемыеСсылки)", "");
// Через построитель устанавливаем нужные отборы (период и физлица)
ПостроительЗапроса = Новый ПостроительЗапроса(ТекстЗапроса);
ПостроительЗапроса.Параметры.Вставить("НачалоПериода", НачалоМесяца(Период));
ПостроительЗапроса.Параметры.Вставить("КонецПериода", КонецМесяца(Период));
ПостроительЗапроса.Параметры.Вставить("ОкончаниеИнтервалаПредставленияПериоды", ДобавитьМесяц(КонецМесяца(Период),60));
ПостроительЗапроса.Параметры.Вставить("МаксимальнаяДата", Дата(3999,12,31,23,59,59));
ЭлементОтбора = ПостроительЗапроса.Отбор.Добавить("ФизическоеЛицо");
ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке;
ЭлементОтбора.Использование = Истина;
СписокЗначенийФизлица = Новый СписокЗначений;
СписокЗначенийФизлица.ЗагрузитьЗначения(Физлица);
ЭлементОтбора.Значение = СписокЗначенийФизлица;
Запрос = ПостроительЗапроса.ПолучитьЗапрос();
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
// Результат в ТЗ
ТЗ = Запрос.Выполнить().Выгрузить(); ПоказатьЕсли ОтборПоПодразделению Тогда
ЭлементОтбора = ПостроительЗапроса.Отбор.Добавить("Подразделение");
ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.Значение = Подразделение;
КонецЕсли;
Предлагаю в шаблон печатных форм добавить вариант использования в безопасном режиме с добавлением всевозможных разрешений, а то приходится другие ресурсы искать. Неполный список разрешений:
Регистрация внешних компонент
Печать штрихкодов и QR-кодов
ПараметрыРегистрации.БезопасныйРежим = Истина;
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты(
"ОбщийМакет.КомпонентаПечатиШтрихкодов",
"Вывод в печатную форму штрихкода EAN13 AddOn 5");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты(
"ОбщийМакет.КомпонентаПечатиQRКода",
"Вывод в печатную форму QR-кода");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
ПоказатьРазрешение на использование каталога временных файлов
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(
Истина, Истина, "Чтение и запись файла во временном каталоге");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Разрешение на использование привилегированного режима
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима(
"Требуется для работы под неполными правами..");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Если смотреть на сайте, то данный вопрос уже .
В ЗУП (например: 3.1.10), если придерживаться той-же схемы, то получится требуемый результат (11/01/2019 - 31/01/2019......01/06/2019 - 17/06/2019):
ВЫБРАТЬ
ДанныеПроизводственногоКалендаря.Дата КАК Дата,
ГОД(ДанныеПроизводственногоКалендаря.Дата) * 100 + МЕСЯЦ(ДанныеПроизводственногоКалендаря.Дата) КАК НомерМесяца
ПОМЕСТИТЬ ВТ_ДатыКалендаря
ИЗ
РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ГДЕ
ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &ПериодДействияНачало И &ПериодДействияКонец
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
МИНИМУМ(ВТ_ДатыКалендаря.Дата) КАК ДатаНачала,
МАКСИМУМ(ВТ_ДатыКалендаря.Дата) КАК ДатаОкончания
ИЗ
ВТ_ДатыКалендаря КАК ВТ_ДатыКалендаря
СГРУППИРОВАТЬ ПО
ВТ_ДатыКалендаря.НомерМесяца ПоказатьИ есть (не проверял правда):
&НаСервере
Функция РазбитьПериодНаПодпериоды(Знач ДатаНачала, Знач ДатаОкончания)
ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить("ДатаНачала");
ТаблицаЗначений.Колонки.Добавить("ДатаОкончания");
ПервыйОбход = Истина;
Если Отчет.УровеньДетализации = "День" Тогда
Пока ДатаНачала <= ДатаОкончания Цикл
Если ПервыйОбход Тогда
Если КонецДня(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = КонецДня(ДатаНачала);
КонецЕсли;
Иначе
Если КонецДня(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоДня(ДатаНачала);
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоДня(ДатаНачала);
НоваяСтрока.ДатаОкончания = КонецДня(ДатаНачала);
КонецЕсли;
КонецЕсли;
ДатаНачала = КонецДня(ДатаНачала)+1;
ПервыйОбход = Ложь;
КонецЦикла;
ИначеЕсли Отчет.УровеньДетализации = "Неделя" Тогда
Пока ДатаНачала <= ДатаОкончания Цикл
Если ПервыйОбход Тогда
Если КонецНедели(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = КонецНедели(ДатаНачала);
КонецЕсли;
Иначе
Если КонецНедели(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоНедели(ДатаНачала);
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоНедели(ДатаНачала);
НоваяСтрока.ДатаОкончания = КонецНедели(ДатаНачала);
КонецЕсли;
КонецЕсли;
ДатаНачала = КонецНедели(ДатаНачала)+1;
ПервыйОбход = Ложь;
КонецЦикла;
ИначеЕсли Отчет.УровеньДетализации = "Месяц" Тогда
Пока ДатаНачала <= ДатаОкончания Цикл
Если ПервыйОбход Тогда
Если КонецМесяца(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = КонецМесяца(ДатаНачала);
КонецЕсли;
Иначе
Если КонецМесяца(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоМесяца(ДатаНачала);
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоМесяца(ДатаНачала);
НоваяСтрока.ДатаОкончания = КонецМесяца(ДатаНачала);
КонецЕсли;
КонецЕсли;
ДатаНачала = КонецМесяца(ДатаНачала)+1;
ПервыйОбход = Ложь;
КонецЦикла;
ИначеЕсли Отчет.УровеньДетализации = "Квартал" Тогда
Пока ДатаНачала <= ДатаОкончания Цикл
Если ПервыйОбход Тогда
Если КонецКвартала(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = ДатаНачала;
НоваяСтрока.ДатаОкончания = КонецКвартала(ДатаНачала);
КонецЕсли;
Иначе
Если КонецКвартала(ДатаНачала) >= ДатаОкончания Тогда
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоКвартала(ДатаНачала);
НоваяСтрока.ДатаОкончания = ДатаОкончания;
Прервать;
Иначе
НоваяСтрока = ТаблицаЗначений.Добавить();
НоваяСтрока.ДатаНачала = НачалоКвартала(ДатаНачала);
НоваяСтрока.ДатаОкончания = КонецКвартала(ДатаНачала);
КонецЕсли;
КонецЕсли;
ДатаНачала = КонецКвартала(ДатаНачала)+1;
ПервыйОбход = Ложь;
КонецЦикла;
КонецЕсли;
Возврат ТаблицаЗначений;
КонецФункции Показатьв версии ЗУП 3.1.12.144 не экспортная, в версии 3.1.13.145 уже экспортная.
// Формирует временную таблицу, содержащую поля с запрашиваемыми кадровыми данными сотрудников, в том числе носящими
// периодический характер.
// Содержит обязательные поля Сотрудник, ФизическоеЛицо и Период, соответствующие переданным во временной таблице
// отборов.
//
// Параметры:
// ТолькоРазрешенные - Булево, если Истина то текст запроса будет построен с использованием
// ключевого слова РАЗРЕШЕННЫЕ.
// ОписательВременнойТаблицыОтборов - структура, описывающая временную таблицу, служащую фильтром
// по сотрудникам для получения кадровых данных
// см. КадровыйУчет.ОписаниеВременнойТаблицыОтборовСотрудников.
// КадровыеДанные - Строка, перечисление имен кадровых данных, разделенных запятыми.
// - Массив, содержащий строки имен кадровых данных.
// ФормироватьСПериодичностьДень - Булево, при получении кадровых данных, хранящихся в периодических
// регистрах сведений с периодичностью менее чем День, значение Истина позволяет
// отбирать самое последние значения в пределах дня.
// ИсточникиДанных - Соответствие, содержит служебную информацию об используемых в построении запроса
// источниках данных
// ИмяВТПостоянныеКадровыеДанныеСотрудников - Строка, указывает оригинальное имя временной таблицы,
// формируемой методом.
//
// Список полей, допустимых в параметре КадровыеДанные, если сведений в базе данных нет, возвращается
// NULL, исключения приведены в скобках, поле указания типа кадровых данных.
//
// - Все имена кадровых данных физических лиц (см. ЗапросВТКадровыеДанныеФизическихЛиц).
//
// - Все имена кадровых данных, разрешенных для метода ЗапросВТПостоянныеКадровыеДанныеСотрудников.
//
// Информация о рабочем месте.
// - РабочееМестоПериодРегистрации - Дата
// - РабочееМестоРегистратор - ДокументСсылка
// - Организация - СправочникСсылка.Организации
// - Подразделение - СправочникСсылка.ПодразделенияОрганизаций
// - Должность - СправочникСсылка.Должности
// - ВидЗанятости - ПеречисленияСсылка.ВидыЗанятости
// - ВидСобытия - ПеречисленияСсылка. ВидыКадровыхСобытий
// - КоличествоСтавок - Число, в этой конфигурации всегда 1.
// - ДолжностьПоШтатномуРасписанию - СправочникСсылка.ШтатноеРасписание
// - ВидДоговора - ПеречислениеСсылка.ВидыДоговоровССотрудниками
// - МестоВСтруктуреПредприятия - СправочникСсылка.СтруктураПредприятия.
//
// - РазрядКатегорияПериодРегистрации - Дата
// - РазрядКатегорияРегистратор - ДокументСсылка
// - РазрядКатегория - СправочникСсылка.РазрядыКатегорииДолжностей.
//
// - ПКУПериодРегистрации - Дата
// - ПКУРегистратор - ДокументСсылка
// - ПКУ - СправочникСсылка.РазрядыКатегорииДолжностей.
//
// - СостояниеПериодРегистрации - Дата
// - Состояние - ПеречислениеСсылка.СостоянияСотрудника.
//
// - ТерриторияПериодРегистрации - Дата
// - ТерриторияРегистратор
// - Территория - СправочникСсылка.ТерриторииВыполненияРабот.
//
// Информация о свойствах рабочего места.
// - ЯвляетсяЧленомЛетногоЭкипажа - Булево (Ложь)
// - ЯвляетсяШахтером - Булево (Ложь)
// - ЯвляетсяФармацевтом - Булево (Ложь)
// - ЯвляетсяРаботникомСДосрочнойПенсией - ПеречислениеСсылка.ВидыРаботСДосрочнойПенсией
// (Перечисления.ВидыРаботСДосрочнойПенсией.ПустаяСсылка).
// - ЯвляетсяЧленомЭкипажаСуднаПодФлагомРФ - Булево (Ложь)
// - ТарифнаяСетка - СправочникСсылка.ТарифныеСетки
// - ТарифнаяСеткаНадбавки - СправочникСсылка.ТарифныеСетки
// - КлассныйЧинРангДолжности - СправочникСсылка.КлассныеЧиныРанги.
//
// Информация об оплате труда.
// - ОплатаТрудаПериодЗаписи - Дата
// - ОплатаТрудаРегистратор - ДокументСсылка
// - ТарифнаяСтавка - Число
// - ФОТ - Число
// - Надбавка - Число, в этой конфигурации всегда 0.
// - ОсновноеНачисление - ПланВидовРасчета.Начисления
// - ПоказательТарифнойСтавки - СправочникСсылка.ПоказателиРасчетаЗарплаты.
//
// - СовокупнаяТарифнаяСтавкаПериодРегистрации - Дата
// - СовокупнаяТарифнаяСтавкаРегистратор - ДокументСсылка
// - СовокупнаяТарифнаяСтавка - Число
// - ВидСовокупнойТарифнойСтавки - ПеречислениеСсылка.ВидыТарифныхСтавок.
//
// - ПорядокРасчетаСтоимостиЕдиницыВремениПериодРегистрации - Дата
// - ПорядокРасчетаСтоимостиЕдиницыВремениРегистратор - ДокументСсылка
// - ПорядокРасчетаСтоимостиЕдиницыВремени - ПеречислениеСсылка.ПорядокРасчетаСтоимостиЕдиницыВремениОплатыТруда.
//
// - ГрейдПериодРегистрации - Дата
// - ГрейдРегистратор - ДокументСсылка
// - Грейд - СправочникСсылка.Грейды.
//
// - ГрафикРаботыПериодРегистрации - Дата
// - ГрафикРаботыРегистратор - ДокументСсылка
// - ГрафикРаботы - СправочникСсылка.ГрафикиРаботыСотрудников
// - СуммированныйУчетРабочегоВремени - Булево.
//
// - ДоляНеполногоРабочегоВремени - Число
//
// - АвансПериодРегистрации - Дата
// - АвансРегистратор - ДокументСсылка
// - СпособРасчетаАванса - ПеречислениеСсылка.СпособыРасчетаАванса
// - Аванс - Число.
//
// - ЗарплатныйПроектДатаОткрытияЛицевогоСчета - Дата
// - ЗарплатныйПроектРегистратор - ДокументСсылка.ПодтверждениеОткрытияЛицевыхСчетовСотрудников
// - ЗарплатныйПроект - СправочникСсылка.ЗарплатныеПроекты
// - НомерЛицевогоСчета - Строка.
//
// Информация об учете затрат.
// - УчетЗатратПериодРегистрации - Дата
// - СтатьяФинансирования - СправочникСсылка.СтатьиФинансированияЗарплата
// - СпособОтраженияЗарплатыВБухучете - СправочникСсылка.СпособыОтраженияЗарплатыВБухУчете
// - ОтношениеКЕНВД - ПеречислениеСсылка.ОтношениеКЕНВДЗатратНаЗарплату
// - УчетЗатратДокументОснование - ДокументСсылка.ПриемНаРаботу.
//
// Основные данные контрактов, договоров сотрудников.
// - ДатаДоговораКонтракта - Дата, так же поддерживается идентификатор ТрудовойДоговорДата
// - НомерДоговораКонтракта - Строка, так же поддерживается идентификатор ТрудовойДоговорНомер
// - ДатаНачала - Дата
// - ПоступлениеНаСлужбуВпервые - Булево.
//
// Сведения контракта, договора сотрудника.
// - ПредставительНанимателя - СправочникСсылка.ФизическиеЛица
// - ДолжностьПредставителяНанимателя - СправочникСсылка.Должности
// - ОснованиеПредставителя - Строка
// - ВидАктаГосоргана - Строка
// - ДатаОкончания - Дата
// - СрочныйДоговор - Булево
// - СрокЗаключенияДоговора - Строка
// - ОборудованиеРабочегоМеста - Строка
// - ИныеУсловияДоговора - Строка
// - ОснованиеСрочногоДоговора - СправочникСсылка.ОснованияЗаключенияСрочныхКонтрактовГосслужащих
// - СправочникСсылка.ОснованияЗаключенияСрочныхДоговоровМуниципальныхСлужащих
// - СправочникСсылка.ОснованияЗаключенияСрочныхТрудовыхДоговоров.
//
// Информация о классах условий труда по результатам специальной оценки на рабочем месте.
// - КлассУсловийТрудаПериодРегистрации - Дата
// - КлассУсловийТруда - ПеречислениеСсылка.КлассыУсловийТрудаПоРезультатамСпециальнойОценки
// - КлассУсловийТрудаДатаРегистрацииИзменений - Дата. ПоказатьВ коде получаем "Состояние"
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
// Создание таблицы дней
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(
Запрос.МенеджерВременныхТаблиц,
НачалоДня(Объект.ДатаНачала),
КонецДня(Объект.ДатаОкончания),
"ДЕНЬ",
"Дата",
"Календарь");
ПараметрыПолучения = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛи ц();
ПараметрыПолучения.Организация = Объект.Организация;
ПараметрыПолучения.НачалоПериода = НачалоДня(Объект.ДатаНачала);
ПараметрыПолучения.ОкончаниеПериода = КонецДня(Объект.ДатаОкончания);
ПараметрыПолучения.КадровыеДанные = "ДатаПриема,ДатаУвольнения,Состояние";
ПараметрыПолучения.СписокФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Справочники.Сотрудники.НайтиПоНаименованию("Иванов Иван Иванович").ФизическоеЛицо);
КадровыйУчет.СоздатьВТСотрудникиОрганизации(
Запрос.МенеджерВременныхТаблиц,
Истина,
ПараметрыПолучения);
// Получение кадровых данных по дням периода
Запрос.Текст =
"ВЫБРАТЬ
| СотрудникиОрганизацииПоОсновномуМестуРаботы.Сотрудник,
| СотрудникиОрганизацииПоОсновномуМестуРаботы.Состояние,
| СписокДат.Дата КАК Дата
|ПОМЕСТИТЬ ВТСотрудникиДаты
|ИЗ
| Календарь КАК СписокДат
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСотрудникиОрганизации КАК СотрудникиОрганизацииПоОсновномуМестуРаботы
| ПО (ИСТИНА)";
Запрос.Выполнить();
ОписательТаблиц = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотруднико в(
Запрос.МенеджерВременныхТаблиц,
"ВТСотрудникиДаты",
"Сотрудник,Дата");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательТаблиц, Истина, "Состояние");
Запрос.Текст =
"ВЫБРАТЬ ВТКадровыеДанныеСотрудников.* ИЗ ВТКадровыеДанныеСотрудников КАК ВТКадровыеДанныеСотрудников";
ВТСотрудникиИнтервалы = Запрос.Выполнить().Выгрузить(); Показатьделаю через Мастер печатных форм
как я понял, реализация через БСП (ее плохо знаю), но инструмент хороший для сложных форм.
Есть возможность вставить функцию. автор молчит.
добавляю функцию: ДолжностьСотрудника
КадровыйУчет.КадровыеДанныеСотрудников(Истина, СсылкаНаОбъект.Сотрудник.ФизическоеЛицо, "Должность, ДолжностьПоШтатномуРасписанию")
вывод на печать: Строка(ДопФункции.ДолжностьСотрудника[0].ДолжностьПоШтатномуРасписанию)
на печать не выводит, а сообщение:
Ошибка в заполнении параметра ДолжностьСотрудникаДательный
{(1)}: Индекс находится за границами массива
По видимому вам возвращается пустой массив.
Скорее всего ошибка передаваемом значении в функцию.
Наверно должно быть так: КадровыйУчет.КадровыеДанныеСотрудников(Истина, СсылкаНаОбъект.Сотрудник, "Должность, ДолжностьПоШтатномуРасписанию")
В моем случае выпало "водительское удостоверение"
А учитывая что могут быть введенные вручную типа "паспорт гражданина Российской Федерации" и тд.
Лучше перестраховаться конкретным видом документа:
ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.НайтиПоНаименованию("Паспорт гражданина РФ");
ДанныеФизЛица = КадровыйУчет.ДокументыФизическихЛиц(Выборка.ФизическоеЛицо, Истина, ВидДокумента);
Серия = ДанныеФизЛица[0].Серия;
Номер = ДанныеФизЛица[0].Номер;
...
ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудника(Сотрудник, ТекущаяДата(),,); "
По описанию должна выйти Таблица значений, а на выходе Соответствие. Отсюда вопрос: как это Соответствие преобразовать в таблицу значений???
Спасибо!
Попробовал "для списка сотрудников", тут выдает ошибку:
{ВнешняяОбработка.КонтрольИндексации.Форма.Форма.Форма(208)}: Метод объекта не обнаружен (ТекущиеНачисленияСотрудников)
ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудник, Объект.ДатаПроверки,,);
В глобальном модуле эта функция есть, МассивСотрудник - это массив, т.е. параметры вроде правильно заданы, не пойму, в чем проблема??? А мне нужны оба метода. (Я пытаюсь получить само Начисление и Размер/сумму).
У меня релиз платформы; 8.3.17.1386, конфигурации 3.1.15.67
Заранее спасибо!
// Подготовим Запрос и Менеджер временных таблиц.
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
// Сформируем временную таблицу ВТКадровыеДанныеФизическихЛиц.
СоздатьНаДатуВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, ТолькоРазрешенные, СписокСотрудников, КадровыеДанные, ДатаПолученияДанных, ПоляОтбораПериодическихДанных, ФормироватьСПериодичностьДень);
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Строка),
"Организация,ФизическоеЛицо,ТабельныйНомер,Подразделение,Должность,ВидЗанятости,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ДатаПриема,ДатаУвольнения,ГрафикРаботы,СтатьяФинансирования, РазрядКатегория ", ТекущаяДата());
ПоказатьТочное название запрашиваемого реквизита посмотрите в описании процедур:
КадровыйУчетВнутренний.ЗапросВТКадровыеДанныеСотрудников()
КадровыйУчетВнутренний.ЗапросВТПостоянныеКадровыеДанныеСотрудников()
1. Функция по склонению фразы типа "календарных дней"
// возвращает "8 календарных дней"
Функция ФормаМножественногоЧислаДней(КоличествоДней)
// Функция преобразует строку к множественному числу
//
// Параметры:
// Слово1 - форма слова в ед числе ("шкаф")
// Слово2 - форма слова для числит 2-4 ("шкафа")
// Слово3 - форма слова для числит 5-10 ("шкафов")
// ЦелоеЧисло - целое число.
//
// Возвращаемое значение:
// строку - одну из строк в зависимости от параметра ЦелоеЧисло.
//
// Описание:
// Предназначена для формирования "правильной" подписи к числительным.
//
Возврат "" + КоличествоДней + ПерсонифицированныйУчет.ФормаМножественногоЧисла(НСтр("ru = ' календарный день'"), НСтр("ru = ' календарных дня'"), НСтр("ru = ' календарных дней'"), КоличествоДней);
КонецФункции
Показать2. Получаем интервалы работы сотрудников за заданный период
подробнее см. в статье
Если ТипЗнч(Сотрудник) <> Тип("Массив") Тогда
СписокСотрудников = Новый Массив();
СписокСотрудников.Добавить(Сотрудник);
Иначе
СписокСотрудников = Сотрудник;
КонецЕсли;
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ПараметрыПолученияРабочихМест = КадровыйУчет.ПараметрыДляЗапросВТРабочиеМестаСотрудниковПоСпискуСотрудник ов(СписокСотрудников, Объект.МесяцНачисления, КонецМесяца(Объект.МесяцНачисления));
ПараметрыПолученияРабочихМест.Организация = Объект.Организация;
// Получаем рабочие места сотрудников
КадровыйУчет.СоздатьВТРабочиеМестаСотрудников(Запрос.МенеджерВременныхТаблиц, Истина, ПараметрыПолученияРабочихМест);
//ВТРабочиеМестаСотрудников= Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("ВТРабочиеМестаСотрудников").ПолучитьДанные().Выгрузить();
Показать
Функция ПолучитьОплату(ДокументПечати,ИдентификаторСтрокиСотрудника,Ставка, Сотрудник, ДатаНачала)
ПредставлениеТарифнойСтавки = "";
ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудника(Сотрудник, КонецДня(ДатаНачала),,);
Для Каждого Строка Из ТекущиеДанныеОплатыТруда Цикл
Размер = Строка.Значение[0].Размер;
Для Каждого СтрокаП Из Строка.Значение[0].Показатели Цикл
РазмерП = "";
Если СтрокаП.Ключ = Строка.Значение[0].ОсновнойПоказатель Тогда
Если СтрокаП.Ключ.Идентификатор = "Оклад" Тогда
ИначеЕсли СтрНайти(СтрокаП.Ключ.Идентификатор, "Стаж") Тогда
ТаблицаСотрудников = Новый ТаблицаЗначений();
ТаблицаСотрудников.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ТаблицаСотрудников.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата"));
СтрокаТС = ТаблицаСотрудников.Добавить();
СтрокаТС.Сотрудник = Сотрудник;
СтрокаТС.Период = КонецДня(ДатаНачала);
ТаблицаСтажей = КадровыйУчетРасширенный.СведенияОСтажахСотрудников(ТаблицаСотрудников);
Для каждого СтрокаТС Из ТаблицаСтажей Цикл
Для каждого СтрокаТС_Все Из СтрокаТС.Значение Цикл
Если СтрокаТС_Все.Ключ = СтрокаП.Ключ.ВидСтажа Тогда
Для каждого СтрокаШкалыСтажа Из СтрокаП.Ключ.ШкалаОценкиСтажа Цикл
Если СтрокаШкалыСтажа.ВерхняяГраницаИнтервалаСтажа >= (СтрокаТС_Все.Значение.Лет*12) Тогда
РазмерП = " (" + СтрокаШкалыСтажа.ЗначениеПоказателя + "%)";
Прервать;
КонецЕсли;
Если СтрокаШкалыСтажа.НомерСтроки = СтрокаП.Ключ.ШкалаОценкиСтажа.Количество() Тогда
РазмерП = " (" + СтрокаШкалыСтажа.ЗначениеПоказателя + "%)";
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Иначе
РазмерП = " (" + СтрокаП.Значение + "%)";
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПредставлениеТарифнойСтавки = ПредставлениеТарифнойСтавки + Строка.Ключ + " " + Размер + РазмерП + Символы.ПС;
КонецЦикла;
Возврат ПредставлениеТарифнойСтавки;
КонецФункции
ПоказатьЭтот сборник стандартных процедур и функций спас меня!!!
В ЗУП-3.1 есть такая замечательная функция:
ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудника(Сотрудник, ТекущаяДата(),,);ТекущиеДанныеОплатыТруда - это Соответствие. Кто-нибудь может сказать, как это Соответствие "конвертировать" в Таблицу значений? Содержимое вижу, а "вынуть" значения мозгов не хватает. Заранее спасибо!
В 1С переношу данные из Паруса 10, в нем не удалось найти сведения по отработанному времени расчета среднего для отпуска.
Да и как правило в Парусе очень много ошибок в среднем.
Поэтому стоит такая задача рассчитать отработанное время непосредственно в 1С по перенесенным начислениям (вытеснения все настроены).
Никто не сталкивался с такой задачей?
Собственно надо рассчитать следующие значения:
ОтработаноДней
ОтработаноЧасов
ОтработаноДнейШестидневка
ОтработаноДнейПятидневка
ОтработаноЧасовПятидневка
ОтработаноДнейКалендарных
Хотелось бы без кучи запятых посередине и не понятного перечисления реквизитов в конце.
Пока сделал так:
СведенияОбОрганизации = РегламентированнаяОтчетностьВызовСервера.ПолучитьСведенияОбОрганизации(КадровыеДанные.Организация, КадровыеДанные.ДатаПриема, Сведения);
МассивВидовКонтактнойИнформацииОрганизации = Новый Массив;
МассивВидовКонтактнойИнформацииОрганизации.Добавить(Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации);
МассивВидовКонтактнойИнформацииОрганизации.Добавить(Справочники.ВидыКонтактнойИнформации.ФактАдресОрганизации);
//МассивВидовКонтактнойИнформацииОрганизации.Добавить(Справочники.ВидыКонтактнойИнформации.ПочтовыйАдресОрганизации);
КонтактнаяИнформацияОрганизации = КонтактнаяИнформацияБЗК.КонтактнаяИнформацияОбъектов(КадровыеДанные.Организация,, МассивВидовКонтактнойИнформацииОрганизации, КадровыеДанные.ДатаПриема);
АдресЮридический = КонтактнаяИнформацияБЗК.ПредставлениеКонтактнойИнформации(КонтактнаяИнформацияОрганизации, КадровыеДанные.Организация, Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации);
АдресФактический = КонтактнаяИнформацияБЗК.ПредставлениеКонтактнойИнформации(КонтактнаяИнформацияОрганизации, КадровыеДанные.Организация, Справочники.ВидыКонтактнойИнформации.ФактАдресОрганизации);
СведенияОбОрганизации.Вставить("ПолныйАдрФакт", АдресФактический);
Показать
//Адрес в виде представления и в формате xml и json
КонтИнформация = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(Объект.Организация,"",ТекущаяДата(),Ложь);
//Переобразуем в структуру, если надо
СведенияОбАдресе = РаботаСАдресами.СведенияОбАдресе(КонтИнформация[0].ЗначенияПолей);
Подробнее как работать с контактной информаций разобрано в статье:
Там и сразу можно отбор установить на нужные данные.
СтруктураДанных = Новый Структура();
СтруктураДанных.Вставить("ДатаНачала",);
СтруктураДанных.Вставить("ДатаОкончания",);
СтруктураДанных.Вставить("РазмерОклада",);Процедура КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников возвращает по одному зарплатному проекту на сотрудника:
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ВТОсновныеСотрудникиФизическихЛиц.Сотрудник КАК Сотрудник,
| ДАТАВРЕМЯ(1, 1, 1) КАК Период
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| ВТОсновныеСотрудникиФизическихЛиц КАК ВТОсновныеСотрудникиФизическихЛиц";
Запрос.Выполнить();
ОписательВременныхТаблиц =
КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотруднико в(
МенеджерВременныхТаблиц,
"ВТСотрудники",
"Сотрудник,Период");
КадровыеДанные = "ЗарплатныйПроект";
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(
ОписательВременныхТаблиц,
Истина,
КадровыеДанные); ПоказатьЕсть нечто похожее но возвращает ТЗ СпособыПрямыхВыплатФСС.ТаблицаЗарплатныхПроектовИБанковскихСчетов(ФизическиеЛица)
Насколько помню, банковские реквизиты можно вводить только в нескольких документах связанных с возмещением ФСС,
и то там алгоритм заполнения реализован на основании последнего введенного документа (данные берутся из последнего документа).
Возврат Отчеты.АнализНачисленийИУдержаний.РасчетныйЛисток(ФизическоеЛицо, Организация, ДатаНачала);
Когда достигнем критический массы "утопленного" софта и интструментов - болото станет сохнуть и на благодатной почве перепревших заблуждений начнут пробиваться ростки человеческих идей.
Хронология: Еще пять лет будем будем тонуть, потом еще пять захлебываться в собственных ошибках, потом еще пять лет "выжившие" будут в растерянности от осознания собственной глупости и стыда. Наконец, спустя 20 лет станут вертеть этот ИИ на здравомом смысле.
Ок, каждые 5 лет спрашивайте меня как дела - всегда рад цинично просветить реальность)
У меня диаметрально противоположная точка. Можно взять на работу в IT бывшего повара, официанта и он будет прекрасно работать. Так ДОЛЖНО быть, но это не так. Экзамен 1С Эксперт по технологическом вопросам в этом плане очень хороший пример почему это не так. За 10 лет экзамен 800 человек. И то, не все в полной мере готовы к практической работе. Это сам экзаменатор на своей лекции рассказал. Потому что это ненормально когда человек разбирается и в железе, и в СУБД, причем в разных СУБД. Естественно что таких людей мало.
Правильный подход в идеале - заниматься ТОЛЬКО ЗУП 3.1, разбираться в методической части и знать наизусть где какая функция лежит и зачем она нужна. Тогда если даже ты не очень умный, то ничего страшного. Выучил наизусть как запрограммировать доплату до оклада и программируешь ее по шаблону в разных организациях. Точно знаешь сколько у тебя часов на это уйдет, говоришь заказчику сколько часов у тебя на это уйдет. И все довольны.
Поэтому иногда быть умным плохо. Ты начинаешь и от себя и от других требовать прыжков выше головы. И ты от этого хода мыслей не откажешься потому что тебе это доставляет. Ты чего-то достиг по жизни, ты не какой-нибудь лошара типа тех 1016 человек которые плюсы к статье поставили.
Кстати, включите, пож-та, в инструкцию как получить табличный документ расчетного листка. По-моему, неочевидно.
Возврат Отчеты.АнализНачисленийИУдержаний.РасчетныйЛисток(ФизическоеЛицо, Организация, ДатаНачала);
Но было бы интересно услышать как это делать правильно.
А можно ли получить список сотрудников на указанную дату, находящихся в отпуске по уходу за ребенком?
ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудник, ТекущаяДата(),,);
по паспортным данным есть нюанс, если в РегистрСведений.ДокументыФизическихЛиц.Форма.ДокументыФизическогоЛица есть несколько записей, то с кодом указанным ниже будет тянутся документ по последней дате, а это может быть и военник и удостоверение тракториста и т.д.
ДанныеФизЛица = КадровыйУчет.ДокументыФизическихЛиц(ВыборкаСтрок.ФизическоеЛицо, Истина);
ОбластьМакетаСтрока.Параметры.Паспорт = "" + ДанныеФизЛица[0].ВидДокумента + ", "
+ ДанныеФизЛица[0].Серия + ", " + ДанныеФизЛица[0].Номер + ", выдан: " + ДанныеФизЛица[0].КемВыдан;
Всё из-за того, что есть расчёт первой половины месяца, и часть данных лежит в регистрах авансов.
Можно взять данные из регистра СведенияОДоходахНДФЛ
1С использует в отчёте НачисленныеДоходыВОтчетахПоНДФЛ соединение с тремя регистрами.
Вот пример функции, как можно использовать запрос этого отчёта и получить данные начисленного:
Пример функции для получения фактических Начислений |
|---|
// пример вызова
МассивФизЛиц = Новый Массив;
МассивФизЛиц.Добавить(Справочники.ФизическиеЛица.НайтиПоНаименованию("Иванов Иван Иваныч") );
тзнНачисленныеДоходы = НачисленныеДоходыВОтчетахПоНДФЛ( МассивФизЛиц, Месяц, Организация );
// получение данных о фактических Начислениях по запросу из отчёта НачисленныеДоходыВОтчетахПоНДФЛ
&НаСервереБезКонтекста
Функция НачисленныеДоходыВОтчетахПоНДФЛ( МассивФизЛиц, Месяц, Организация )
// получение текста запроса из отчёта НачисленныеДоходыВОтчетахПоНДФЛ
СхемаКомпоновкиДанных = Отчеты.НачисленныеДоходыВОтчетахПоНДФЛ.ПолучитьМакет( "ОсновнаяСхемаКомпоновкиДанных");
ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НачисленныеДоходы.Запрос;
// фильтр по Физлицам
ПодстрокаПоиска = "Справочник.ФизическиеЛица КАК ФизическиеЛица";
ПодстрокаЗамены = "Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ ФизическиеЛица.Ссылка В (&МассивФизЛиц) ";
ТекстЗапроса = СтрЗаменить( ТекстЗапроса, ПодстрокаПоиска, ПодстрокаЗамены );
// обработка ВТ запроса
ЗарплатаКадрыОбщиеНаборыДанных.ЗаменитьЗапросыКПредставлениямВиртуальныхТаблиц( ТекстЗапроса );
// выполнение запроса
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр( "НачалоПериода" , НачалоМесяца(Месяц) );
Запрос.УстановитьПараметр( "ОкончаниеПериода" , КонецМесяца(Месяц) );
Запрос.УстановитьПараметр( "Организация" , Организация);
Запрос.УстановитьПараметр( "МассивФизЛиц" , МассивФизЛиц);
тзнНачисленныеДоходы = Запрос.Выполнить().Выгрузить();
Возврат тзнНачисленныеДоходы;
КонецФункции
Показать |
Ниже пример для изменения запроса из СоздатьВТДанныеУчетаВремениИСостоянийСотрудников.
Норма часов будет посчитана независимо от приёма / увольнения сотрудника.
У меня такое решение понадобилось при сдельной работе, когда нужно выплатить не менее регионального МРОТ.
Пример решения - `Норма часов за указанный период` |
|---|
| 1. В расширение добавляем процедуру в общий модуль
УчетРабочегоВремениРасширенный
// добавляем экспортную функцию - чисто для вызова НЕэкспортной
Функция расш_ЗапросВТДанныеУчетаВремениИСостоянийСотрудников(ТолькоРазрешенные, ПараметрыПолученияДанных, ДляСКД = Ложь) ЭКСПОРТ
Результат = ЗапросВТДанныеУчетаВремениИСостоянийСотрудников(ТолькоРазрешенные, ПараметрыПолученияДанных, ДляСКД);
Возврат Результат;
КонецФункции2. Пишем код формирования и доработки запроса.
// копия из модуля УчетРабочегоВремениРасширенный
&НаСервереБезКонтекста
Процедура СоздатьВТДанныеУчетаВремениИСостоянийСотрудников(МенеджерВременныхТаблиц, ТолькоРазрешенные, ПараметрыПолученияДанных )
// текст запроса через расширение и типовой механизм
//Запрос = ЗапросВТДанныеУчетаВремениИСостоянийСотрудников(ТолькоРазрешенные, ПараметрыПолученияДанных);
Запрос = УчетРабочегоВремениРасширенный.расш_ЗапросВТДанныеУчетаВремениИСостоянийСотрудников(ТолькоРазрешенные, ПараметрыПолученияДанных );
//меняем запрос - для ОБЩИХ графиков смотрим ПЛАН по заданному параметрами периоду, а не по периоду работы
стрИскать = "
| И (ПериодыДействияОбщихГрафиковСотрудников.ДатаНачала <= ДанныеОбщихГрафиков.Дата)
| И (ПериодыДействияОбщихГрафиковСотрудников.ДатаОкончания >= ДанныеОбщихГрафиков.Дата
| ИЛИ ДанныеОбщихГрафиков.Дата = ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ПериодыДействияОбщихГрафиковСотрудников.ДатаОкончания, ДЕНЬ), ДЕНЬ, 1)
| И ДанныеОбщихГрафиков.ПереходящаяЧастьПредыдущейСмены)
|";
стрЗамена = "
| И (ИсточникиПолученияДанныхУчетаВремени.ДатаНачала <= ДанныеОбщихГрафиков.Дата)
| И (ИсточникиПолученияДанныхУчетаВремени.ДатаОкончания >= ДанныеОбщихГрафиков.Дата
| ИЛИ ДанныеОбщихГрафиков.Дата = ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ИсточникиПолученияДанныхУчетаВремени.ДатаОкончания, ДЕНЬ), ДЕНЬ, 1)
| И ДанныеОбщихГрафиков.ПереходящаяЧастьПредыдущейСмены)
|";
Запрос.Текст = СтрЗаменить( Запрос.Текст, стрИскать, стрЗамена);
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Выполнить();
КонецПроцедуры
Показать3) Пример использования
АвансЗП=2;
Период = '20260301';
Дата_С = '20260301'
Дата_По = '20260315';
// Инициализация
ПараметрыПолученияДанных = УчетРабочегоВремениРасширенный.ПараметрыДляЗапросВТДанныеУчетаВремениИСостоянийСотрудников();
// аванс - смотрим по датам, окончательную ЗП - смотрим за весь месяц
ПараметрыПолученияДанных.ДатаНачала = ?(АвансЗП=1, Дата_С, НачалоМесяца(Период) );
ПараметрыПолученияДанных.ДатаОкончания = ?(АвансЗП=1, КонецДня(Дата_По), КонецМесяца(Период) );
ПараметрыПолученияДанных.МесяцДатаНачала = НачалоМесяца(Период);
ПараметрыПолученияДанных.МесяцДатаОкончания = КонецМесяца(Период);
ПараметрыПолученияДанных.РассчитыватьПлановоеВремя = Истина;
ПараметрыПолученияДанных.Организация = Организация;
//ПараметрыПолученияДанных.ДатаАктуальности = КонецДня(ДатаДок);
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
// получаем через Общий Модуль УчетРабочегоВремениРасширенный
//УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников( МенеджерВременныхТаблиц, Истина, ПараметрыПолученияДанных);
// запрос учёта времени - типовой переделанный
СоздатьВТДанныеУчетаВремениИСостоянийСотрудников( МенеджерВременныхТаблиц, Истина, ПараметрыПолученияДанных);
// свёртка итоговых данных
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст = "
|ВЫБРАТЬ
| Сотрудник КАК Сотрудник,
| СУММА(Дни) КАК ОтработаноДни,
| СУММА(Часы) КАК ОтработаноЧасы,
| 0 КАК НормаЧасов
|ПОМЕСТИТЬ вт_ДанныеВремени
|ИЗ
| ВТДанныеУчетаВремениИСостоянийСотрудников
|ГДЕ
| ВидУчетаВремени В ( ВЫБРАТЬ Ссылка ИЗ Справочник.ВидыИспользованияРабочегоВремени ГДЕ РабочееВремя )
|СГРУППИРОВАТЬ ПО Сотрудник
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Сотрудник КАК Сотрудник,
| 0 КАК ОтработаноДни,
| 0 КАК ОтработаноЧасы,
| СУММА(ЧасыНорма) КАК НормаЧасов
|ИЗ
| ВТНормаИтоги //вместо ВТДанныеУчетаВремениПоСостояниям
|СГРУППИРОВАТЬ ПО Сотрудник
|;
|ВЫБРАТЬ
| Сотрудник КАК Сотрудник,
| СУММА(ОтработаноДни) КАК ОтработаноДни,
| СУММА(ОтработаноЧасы) КАК ОтработаноЧасы,
| СУММА(НормаЧасов) КАК НормаЧасов
|ИЗ вт_ДанныеВремени
|СГРУППИРОВАТЬ ПО Сотрудник
|";
тзн_ДанныеВремени_Свернуто = Запрос.Выполнить().Выгрузить();
Показать |
Например модуль КадровыйУчетРасширенный добавляем в расширение и пишем:
// добавляем экспортную функцию - чисто для вызова НЕэкспортной
Функция расш_ТекущиеНачисленияСотрудников(Сотрудники, ДатаСведений, ИсключаемыйРегистратор = Неопределено, ФормироватьСПериодичностьДень = Истина) ЭКСПОРТ
Результат = ТекущиеНачисленияСотрудников(Сотрудники, ДатаСведений, ИсключаемыйРегистратор, ФормироватьСПериодичностьДень);
Возврат Результат;
КонецФункцииОтражениеЗарплатыВБухучете.СоздатьВТСведенияОБухучетеЗарплатыСотрудников(МенеджерВременныхТаблиц, "ВТСотрудники", "Сотрудник,Период", КадровыеДанныеСотрудника[0].Организация);Сейчас используется модуль"ОтражениеЗарплатыВБухучетеРасширенный":
ОтражениеЗарплатыВБухучетеРасширенный.СоздатьВТСведенияОБухучетеЗарплатыСотрудников(МенеджерВременныхТаблиц, "ВТСотрудники", "Сотрудник,Период", КадровыеДанныеСотрудника[0].Организация);сделал решение для просмотра Временных таблиц (МенеджерВременныхТаблиц)
Особенно актуально для ЗуП, но и в других моментах может пригодиться.
описание тут:
СрезПоследних
СотрудникиПодлежащиеАттестации
РезультатыАттестацииСотрудников
Периоды
ТаблицаРегистра
СрезПервых
ТаблицаРегистра
ТаблицаРегистра
СрезПоследних
КадровыеДанныеФизическихЛиц
КадровыеДанныеСотрудников
РабочиеМестаСотрудников
СотрудникиОрганизации
ОтработанноеВремя
КадровыеДанныеСотрудниковАнализНачисленийИУдержаний
ПодразделенияСортировкиСотрудников
НачисленныеДоходыНДФЛ
ШтатноеРасписание
ТекущаяКадроваяРасстановка
ФункциональныеОпцииОрганизаций
ФактическиеОтпускаСотрудников
ПлановыеНачисленияСотрудников
ПлановыеУдержанияСотрудников
СтажиСотрудников
СвойстваСтатейФинансирования
БухучетЗарплатыСотрудников
ПоказателиКадровогоПлана
СертификатыПоСпециальностиФизическихЛиц
СведенияОбАккредитацияхСпециалистов
ОсмотрыПоВреднымФакторамИВидамРаботФизическихЛиц
ОсмотрыПоВреднымФакторамФизическихЛиц
ОсмотрыПоВидамРаботФизическихЛиц
СведенияОКандидатах
ЛичныеДанныеКандидатов
СтажПринятыхКандидатов
РабочиеМестаОхраныТруда
ДАННЫЕУЧЕТАРАБОЧЕГОВРЕМЕНИСОТРУДНИКОВ
ДАННЫЕУЧЕТАВРЕМЕНИИСОСТОЯНИЙСОТРУДНИКОВ
ПлановоеВремя
ПоказатьИ регулярка чтобы привести результаты поиска к человекочитаемому виду: "^.*?\(?"([А-Яа-я]*).*?"
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 942569
Создание 14.11.18 16:13
Обновление 20.02.26 16:03
Просмотры 539672
Загрузки 0
Рейтинг
1262
Комментарии 215
Код открыт Да
Рубрики Универсальные функции Зарплата Кадровый учет
Кому Разработчик
Тип файла Нет файла
Платформа 1С 8.3
Конфигурация
1С:Зарплата и кадры государственного учреждения 3
,
1С:Зарплата и Управление Персоналом 3.x
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Бухгалтерский учет
Доступ к файлу Бесплатно (free)