Иногда бывает довольно сложно правильно получить данные или долго, поэтому лучшим вариантом будет использование стандартных процедур.
Буду очень признателен, если Вы поделитесь своим опытом и предложите свои варианты стандартных процедур которые помогают в работе. Или предложите, как дополнить имеющиеся процедуры.
ПОЛУЧИТЬ ДАННЫЕ ПОЗИЦИИ ШТАТНОГО РАСПИСАНИЯ
//Функция возвращает данные позиции штатного расписания на заданную дату в виде таблицы значений
ДанныеПозиции = УправлениеШтатнымРасписанием.ДанныеПозицииШтатногоРасписания(Позиция, ТекущаяДата(), Истина);
ПОЛУЧИТЬ ДЕЙСТВУЮЩИЕ ПЛАНОВЫЕ НАЧИСЛЕНИЯ НА ДАТУ
//Функция возвращает актуальные плановые начисления сотрудников на заданную дату в виде таблицы значений
ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудника(Сотрудник, ТекущаяДата(),,);
//Или для списка сотрудников
ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудник, ТекущаяДата(),,);
ПОЛУЧИТЬ РАЗЛИЧНЫЕ КАДРОВЫЕ ДАННЫЕ
ПОЛУЧИТЬ КАДРОВЫЕ ДАННЫЕ СОТРУДНИКА
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Строка),
"Организация,ФизическоеЛицо,ТабельныйНомер,Подразделение,Должность,ВидЗанятости,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ДатаПриема,ДатаУвольнения,ГрафикРаботы,СтатьяФинансирования, РазрядКатегория ", ТекущаяДата());
В статье описаны более подробно все возможные запрашиваемые данные: //infostart.ru/public/938015/
ПОЛУЧИТЬ СТАЖИ СОТРУДНИКОВ
&НаСервере
Функция РассчитатьСтажиСотрудниковЗанявшихПозиции(ПозицияШР, Должность, Подразделение, ДатаОтсчета, КатегорияДолжности, ОкладИндекс)
СтруктураДанных = Новый Структура();
СтруктураДанных.Вставить("ДатаНачала",);
СтруктураДанных.Вставить("ДатаОкончания",);
СтруктураДанных.Вставить("РазмерОклада",);
ПараметрыПолучения = ПолучитьПараметры();
ПараметрыПолучения.Организация = Отчет.Организация;
//Если ЗначениеЗаполнено(Подразделение) Тогда
// ПараметрыПолучения.Подразделение = Подразделение;
//КонецЕсли;
//Если ВключаяУволенныхНаНачалоПериода Тогда
// ПараметрыПолучения.ВключаяУволенныхНаНачалоПериода = Истина;
//КонецЕсли;
ПараметрыПолучения.НачалоПериода = НачалоМесяца(ДатаОтсчета);
ПараметрыПолучения.ОкончаниеПериода = КонецМесяца(ДатаОтсчета);
ПараметрыПолучения.ПодработкиРаботниковПоТрудовымДоговорам = Истина;
ПараметрыПолучения.РаботникиПоДоговорамГПХ = Ложь;
//ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
//ПараметрыПолучения.Отборы, "ДолжностьПоШтатномуРасписанию", "=", ПозицияШР);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
ПараметрыПолучения.Отборы, "Должность", "=", Должность);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
ПараметрыПолучения.Отборы, "Подразделение", "=", Подразделение);
ПараметрыПолучения.КадровыеДанные = "Сотрудник,ФизическоеЛицо,Подразделение,Должность,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ВидЗанятости,ДатаПриема,ДатаУвольнения";
ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения);
//ДанныеПозиции = УправлениеШтатнымРасписанием.ДанныеПозицииШтатногоРасписания(ПозицияШР, ДатаОтсчета, Истина);
ТаблицаСтажей = КадровыйУчетРасширенный.СведенияОСтажахСотрудников(ТаблицаСотрудников);
Возврат ТаблицаСтажей;
КонецФункции
ПОЛУЧИТЬ ОСНОВНОГО СОТРУДНИКА ФИЗИЧЕСКОГО ЛИЦА
&НаСервере
Процедура УстановитьОсновногоСотрудника(ВыводитьСообщения = Истина)
Объект.ОсновнойСотрудник = КадровыйУчетРасширенный.ОсновнойСотрудникФизЛица(Объект.ФизическоеЛицо, Объект.Организация, Объект.ДатаНачала, ВыводитьСообщения);
КонецПроцедуры
ПОЛУЧИТЬ ПАСПОРТНЫЕ ДАННЫЕ ФИЗИЧЕСКОГО ЛИЦА
ДанныеФизЛица = КадровыйУчет.ДокументыФизическихЛиц(ВыборкаСтрок.ФизическоеЛицо, Истина);
ОбластьМакетаСтрока.Параметры.Паспорт = "" + ДанныеФизЛица[0].ВидДокумента + ", "
+ ДанныеФизЛица[0].Серия + ", " + ДанныеФизЛица[0].Номер + ", выдан: " + ДанныеФизЛица[0].КемВыдан;
ПОЛУЧИТЬ РАБОТАЮЩИХ СОТРУДНИКОВ ПО ЗАДАННЫМ ПАРАМЕТРАМ ОТБОРА
//Пример функция для получения актуальных работающих сотрудников за период
//Возвращается таблица значений
Функция ПроверитьНаличиеПодработки(Сотрудник, ДатаНазначения)
СтруктураДанных = Новый Структура();
СтруктураДанных.Вставить("ДатаНачала",);
СтруктураДанных.Вставить("ДатаОкончания",);
СтруктураДанных.Вставить("РазмерОклада",);
ПараметрыПолучения = ПолучитьПараметры();
ПараметрыПолучения.Организация = ЭтотОбъект.Организация;
//Если ЗначениеЗаполнено(Подразделение) Тогда
// ПараметрыПолучения.Подразделение = Подразделение;
//КонецЕсли;
//Если ВключаяУволенныхНаНачалоПериода Тогда
// ПараметрыПолучения.ВключаяУволенныхНаНачалоПериода = Истина;
//КонецЕсли;
ПараметрыПолучения.НачалоПериода = НачалоМесяца(ДатаНазначения);
ПараметрыПолучения.ОкончаниеПериода = КонецМесяца(ДатаНазначения);
ПараметрыПолучения.ПодработкиРаботниковПоТрудовымДоговорам = Истина;
ПараметрыПолучения.РаботникиПоДоговорамГПХ = Ложь;
// ОТБОР ПО ВИДУ ЗАНЯТОСТИ РАБОТАЕТ ТОЛЬКО НАЧИНАЯ С РЕДАКЦИИ 3.1.7
//ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
// ПараметрыПолучения.Отборы, "ВидЗанятости", "=", Перечисления.ВидыЗанятости.Подработка);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
ПараметрыПолучения.Отборы, "ФизическоеЛицо", "=", Сотрудник.ФизическоеЛицо);
ПараметрыПолучения.КадровыеДанные = "Сотрудник,ФизическоеЛицо,Подразделение,Должность,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ВидЗанятости,ДатаПриема,ДатаУвольнения,ГрафикРаботы";
ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения);
Возврат ТаблицаСотрудников;
КонецФункции
&НаСервере
Функция ПолучитьПараметры()
Возврат КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
КонецФункции
ПОЛУЧИТЬ ДАННЫЕ РАБОЧЕГО (ОТРАБОТАННОГО) ВРЕМЕНИ, ДАННЫЕ ТАБЕЛЯ Т-13
//В ДАННОМ ПРИМЕРЕ МОЖНО ПОЛУЧИТЬ ДАННЫЕ ВРЕМЕНИ ТОЛЬКО ЗА ОДИН МЕСЯЦ
&НаСервере
Процедура Команда1НаСервере()
ПараметрыПолученияДанных = УчетРабочегоВремениРасширенный.ПараметрыПолученияДанныхУчетаВремени();
ДатаНачала = '20250901';
ДатаОкончания = КонецМесяца(ДатаНачала);
ПараметрыПолученияДанных.ДатаНачала = ДатаНачала;
ПараметрыПолученияДанных.ДатаОкончания = ДатаОкончания;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
//Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
// | Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо
// |ИЗ
// | ВТСотрудники КАК Сотрудники";
//МассивСотрудников = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ФизическоеЛицо");
МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(Справочники.Сотрудники.НайтиПоНаименованию("Иванов Иван Иванович"));
СоздатьВТСотрудники(МенеджерВременныхТаблиц, МассивСотрудников, ДатаНачала);
УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаРабочегоВремениСотрудников(МенеджерВременныхТаблиц, Истина, ПараметрыПолученияДанных);
//Колонка "План" говорит о наличии введенного документа Табель, если значение Ложь значит создан документ Табель.
ДанныеТабеляТ13 = МенеджерВременныхТаблиц.Таблицы.Найти("ВТДанныеУчетаРабочегоВремениСотрудников").ПолучитьДанные().Выгрузить();
НормаПоГрафику = МенеджерВременныхТаблиц.Таблицы.Найти("ВТНормаВремени").ПолучитьДанные().Выгрузить();
КонецПроцедуры
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СоздатьВТСотрудники(МенеджерВременныхТаблиц, МассивСотрудников, Месяц, ДатаАктуальности = Неопределено, ДатаНачала = Неопределено, ДатаОкончания = Неопределено)
ТаблицаСотрудники = Новый ТаблицаЗначений;
ТаблицаСотрудники.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ТаблицаСотрудники.Колонки.Добавить("Месяц", Новый ОписаниеТипов("Дата"));
ТаблицаСотрудники.Колонки.Добавить("ДатаАктуальности", Новый ОписаниеТипов("Дата"));
ТаблицаСотрудники.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
ТаблицаСотрудники.Колонки.Добавить("ДатаОкончания", Новый ОписаниеТипов("Дата"));
Для Каждого Сотрудник Из МассивСотрудников Цикл
СтрокаСотрудники = ТаблицаСотрудники.Добавить();
СтрокаСотрудники.Сотрудник = Сотрудник;
КонецЦикла;
ТаблицаСотрудники.ЗаполнитьЗначения(Месяц, "Месяц");
ТаблицаСотрудники.ЗаполнитьЗначения(?(ДатаАктуальности = Неопределено, ТекущаяДата(), ДатаАктуальности), "ДатаАктуальности");
ТаблицаСотрудники.ЗаполнитьЗначения(?(ДатаНачала = Неопределено, Месяц, ДатаНачала), "ДатаНачала");
ТаблицаСотрудники.ЗаполнитьЗначения(?(ДатаОкончания = Неопределено, КонецМесяца(Месяц), ДатаОкончания), "ДатаОкончания");
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТаблицаСотрудники.Сотрудник,
| ТаблицаСотрудники.Месяц,
| ТаблицаСотрудники.ДатаАктуальности,
| ТаблицаСотрудники.ДатаНачала,
| ТаблицаСотрудники.ДатаОкончания
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| &ТаблицаСотрудники КАК ТаблицаСотрудники");
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТаблицаСотрудники", ТаблицаСотрудники);
Запрос.Выполнить();
КонецПроцедуры
ПОЛУЧИТЬ ДАННЫЕ СРЕДНЕГО ЗАРАБОТКА, ОСТАТКА ОТПУСКОВ, РЕЗЕРВА ОТПУСКОВ
&НаСервере
Процедура ПолучитьДанныеСреднегоЗаработкаНаСервере()
ДатаОтпуска = Дата(2025,01,01);
//Расчетный год отпуска
ДатаНачала = Дата(2025,01,01);
ДатаОкончания = Дата(2025,12,31);
ИсходнаяТаблица = УчетСреднегоЗаработка.ПустаяТаблицаИсходныхДанныхРасчетаОбщегоСреднегоЗаработка();
мПараметры = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
мПараметры.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "0000000000");
мПараметры.НачалоПериода = ДатаОтпуска;
мПараметры.ОкончаниеПериода = ДатаОтпуска;
//мПараметры.КадровыеДанные = "Подразделение";
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
мПараметры.Отборы, "ФизическоеЛицо", "=", Справочники.ФизическиеЛица.НайтиПоНаименованию("Иванов Иван Иванович"));
// 1. получаем сотрудников организации
СотрудникиОрганизации = КадровыйУчет.СотрудникиОрганизации(Истина, мПараметры);
// 2. получаем средний заработок сотрудников
СотрудникиОрганизации.Колонки.Добавить("СреднийЗаработок", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));
СотрудникиОрганизации.Колонки.Добавить("ОстатокОтпуска", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(4, 0)));
СотрудникиОрганизации.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));
ОграничитьКоличество = 10;
// получем данные для расчета среднего
СтрокиКУдалению = Новый Массив;
Индекс = 1;
Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл
Если Индекс <= ОграничитьКоличество Тогда
СтрокаТаблицы = ИсходнаяТаблица.Добавить();
СтрокаТаблицы.Сотрудник = СтрокаСотрудник.Сотрудник;
СтрокаТаблицы.ПорядокРасчета = Перечисления.ПорядокРасчетаСреднегоЗаработкаОбщий.Постановление2010;
СтрокаТаблицы.ДатаНачалаСобытия = ДатаОтпуска;
СтрокаТаблицы.НачалоПериодаРасчетаСреднего = ДатаНачала;
СтрокаТаблицы.ОкончаниеПериодаРасчетаСреднего = ДатаОкончания;
Индекс = Индекс + 1;
Иначе
СтрокиКУдалению.Добавить(СтрокаСотрудник);
КонецЕсли;
КонецЦикла;
Для каждого пСтрока из СтрокиКУдалению Цикл
СотрудникиОрганизации.Удалить(пСтрока);
КонецЦикла;
ДанныеДляРасчета = УчетСреднегоЗаработка.ДанныеДляРасчетаОбщегоСреднегоЗаработкаСотрудников(ИсходнаяТаблица, Неопределено, Неопределено, Истина);
Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл
Отбор = Новый Структура("Сотрудник",СтрокаСотрудник.Сотрудник);
ДанныеОВремени = ДанныеДляРасчета.ДанныеОВремени;
ДанныеОНачислениях = ДанныеДляРасчета.ДанныеОНачислениях;
ДанныеОбИндексации = ДанныеДляРасчета.ДанныеОбИндексации;
ДанныеДляРасчетаСотрудник = Новый Структура("ДанныеОВремени,ДанныеОНачислениях,ДанныеОбИндексации");
ДанныеДляРасчетаСотрудник.ДанныеОВремени = ДанныеОВремени.Скопировать(ДанныеОВремени.НайтиСтроки(Отбор));
ДанныеДляРасчетаСотрудник.ДанныеОНачислениях = ДанныеОНачислениях.Скопировать(ДанныеОНачислениях.НайтиСтроки(Отбор));
ДанныеДляРасчетаСотрудник.ДанныеОбИндексации = ДанныеОбИндексации.Скопировать(ДанныеОбИндексации.НайтиСтроки(Отбор));
ДополнительныеПараметры = УчетСреднегоЗаработкаКлиентСервер.ДополнительныеПараметрыРасчетаСреднегоЗаработка();
ДополнительныеПараметры.ДатаНачалаСобытия = ДатаОтпуска;
Если Не ЗначениеЗаполнено(ДополнительныеПараметры.НачалоПериода)
Или Не ЗначениеЗаполнено(ДополнительныеПараметры.ОкончаниеПериода) Тогда
ПериодРасчета = УчетСреднегоЗаработка.ПериодРасчетаОбщегоСреднегоЗаработкаСотрудника(ДатаОтпуска, СтрокаСотрудник.Сотрудник, ДополнительныеПараметры.Начисление);
ДополнительныеПараметры.НачалоПериода = ДатаНачала;
ДополнительныеПараметры.ОкончаниеПериода = ДатаОкончания;
КонецЕсли;
Если ДополнительныеПараметры.ПорядокРасчета = Неопределено Тогда
ДополнительныеПараметры.ПорядокРасчета = УчетСреднегоЗаработкаКлиентСервер.ПорядокРасчетаОбщегоСреднегоЗаработка(ДатаОтпуска);
КонецЕсли;
ДополнительныеПараметры.ПорядокРасчета = Перечисления.ПорядокРасчетаСреднегоЗаработкаОбщий.Постановление2010;
ДополнительныеПараметры.СпособРасчетаОтпуска = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоКалендарнымДням;
ДополнительныеПараметры.Индексации = ДанныеДляРасчета.ДанныеОбИндексации;
СтрокаСотрудник.СреднийЗаработок = УчетСреднегоЗаработкаКлиентСервер.СреднийЗаработокОбщий(ДанныеДляРасчетаСотрудник.ДанныеОНачислениях, ДанныеДляРасчетаСотрудник.ДанныеОВремени, ДополнительныеПараметры);
КонецЦикла;
// 3. считаем остатки отпусков
СписокСотрудников = СотрудникиОрганизации.ВыгрузитьКолонку("Сотрудник");
ВидыОтпусков = Неопределено;
//ВидыОтпусков = Новый Массив;
//ВидыОтпусков.Добавить(Справочники.ВидыОтпусков.Основной);
ТаблицаОстаткиОтпусков = ОстаткиОтпусков.ОстаткиОтпусковСотрудниковНаДату(СписокСотрудников, ДатаОтпуска, ВидыОтпусков);
Для каждого СтрокаСотрудник из СотрудникиОрганизации Цикл
Отбор = Новый Структура("Сотрудник",СтрокаСотрудник.Сотрудник);
СтрокиОтпуска = ТаблицаОстаткиОтпусков.НайтиСтроки(Отбор);
ОстатокОтпуска = 0;
Для каждого СтрокаОтпуска из СтрокиОтпуска Цикл
ОстатокОтпуска = ОстатокОтпуска + СтрокаОтпуска.КоличествоДней;
КонецЦикла;
СтрокаСотрудник.ОстатокОтпуска = ОстатокОтпуска;
СтрокаСотрудник.Сумма = ОстатокОтпуска * СтрокаСотрудник.СреднийЗаработок;
КонецЦикла;
//СотрудникиОрганизации.Колонки.Добавить("СреднийЗаработок",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 2)));
//Сообщить(УчетСреднегоЗаработка.СреднийЗаработок(СотрудникиОрганизации[0].Сотрудник,Дата(2025,12,31)));
//ЗаполнитьТаблицуЗначенийНаФорме(СотрудникиОрганизации,"ТЗ2");
КонецПроцедуры
ПОЛУЧИТЬ ДАННЫЕ БУХГАЛТЕРСКОГО УЧЕТА (ОРГАНИЗАЦИИ, ПОДРАЗДЕЛЕНИЯ, СОТРУДНИКА, НАЧИСЛЕНИЯ)
&НаСервере
Процедура ОтражениеВУчетеНаСервере()
//Тестировалось на релизе 3.1.8
Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("Колесник Дмитрий Иванович");
ДатаНачалаСобытия = ДАТА(2025,12,14);
Начисление = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оплата по окладу");
// Определяет статью финансирования, используемую для СОТРУДНИКА по умолчанию.
ОтражениеВБухучетеНачисления = УчетСреднегоЗаработка.ОтражениеВБухучетеПоУмолчанию(Сотрудник, ДатаНачалаСобытия, Начисление);
// Определяет статью финансирования, используемую для НАЧИСЛЕНИЯ СОТРУДНИКА по умолчанию.
ОтражениеВБухучетеСотрудника = УчетСреднегоЗаработка.ОтражениеВБухучетеПоУмолчанию(Сотрудник, ДатаНачалаСобытия);
//ОтражениеВБухучетеСотрудника2 = ОтражениеЗарплатыВБухучетеРасширенный.НастройкаБухучетаЗарплатыСотрудника(Сотрудник, ДатаНачалаСобытия);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//ВАРИАНТ 1
// Определяет статью финансирования, используемую для НАЧИСЛЕНИЯ СОТРУДНИКА по умолчанию.
// Определяет откуда применяется статья финансирования (из Организации, Подразделения, Сотрудника)
// и выводит статью финансирования с учетом всех введенных данных
КадровыеДанныеСотрудника = КадровыйУчет.КадровыеДанныеСотрудников(Истина,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудник),
"Организация,ФизическоеЛицо,Подразделение,ТерриторияВыполненияРаботВОрганизации", ДатаНачалаСобытия);
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаСотрудников.Сотрудник КАК Сотрудник,
| ТаблицаСотрудников.Период КАК Период,
| ТаблицаСотрудников.Подразделение КАК Подразделение,
| ТаблицаСотрудников.ТерриторияВыполненияРаботВОрганизации КАК ТерриторияВыполненияРаботВОрганизации
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| &ТаблицаСотрудников КАК ТаблицаСотрудников";
Запрос.УстановитьПараметр("ТаблицаСотрудников", КадровыеДанныеСотрудника);
Запрос.Выполнить();
ОтражениеЗарплатыВБухучете.СоздатьВТСведенияОБухучетеЗарплатыСотрудников(МенеджерВременныхТаблиц, "ВТСотрудники", "Сотрудник,Период", КадровыеДанныеСотрудника[0].Организация);
ОтражениеВБухучетеСотрудникаПодробно = МенеджерВременныхТаблиц.Таблицы.Найти("ВТСведенияОБухучетеЗарплатыСотрудников").ПолучитьДанные().Выгрузить();
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//ВАРИАНТ 2
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Сотрудники.Ссылка КАК Сотрудник,
| &ДатаАктуальности КАК Период
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка = &Сотрудник";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
Запрос.УстановитьПараметр("ДатаАктуальности", ДатаНачалаСобытия);
Запрос.Выполнить();
// Из кадрового учета получаем организацию и подразделение.
Описатель = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(МенеджерВременныхТаблиц, "ВТСотрудники");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(Описатель, Истина, "Организация,Подразделение,ТерриторияВыполненияРаботВОрганизации");
Отборы = Новый Массив;
ОтборыНачислений = Новый Структура("ПлановыеНачисления", ОбщегоНазначенияКлиентСервер.СкопироватьМассив(Отборы));
ЗапросВТПлановыеНачисления = КадровыйУчетРасширенный.ЗапросВТПлановыеНачисленияСотрудников(
Истина, "ВТПлановыеНачисленияСотрудников", "ВТСотрудники", "Сотрудник,Период",ОтборыНачислений,Истина);
ЗапросВТПлановыеНачисления.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ЗапросВТПлановыеНачисления.Выполнить();
// Формируем временную таблицу с настройками бухучета.
//Если Начисление <> Неопределено Тогда
ОтражениеЗарплатыВБухучете.СоздатьВТСведенияОБухучетеНачисленийСотрудников(МенеджерВременныхТаблиц, "ВТКадровыеДанныеСотрудников", "Сотрудник,Период", , , Начисление);
//ИмяВТ = "ВТСведенияОБухучетеНачисленийСотрудников";
//Иначе
ОтражениеЗарплатыВБухучетеРасширенный.СоздатьВТСведенияОБухучетеЗарплатыСотрудников(МенеджерВременныхТаблиц, "ВТКадровыеДанныеСотрудников", "Сотрудник,Период");
//ИмяВТ = "ВТСведенияОБухучетеЗарплатыСотрудников";
//КонецЕсли;
ОтражениеВБухучетеНачисленийСотрудникаПодробно = МенеджерВременныхТаблиц.Таблицы.Найти("ВТСведенияОБухучетеНачисленийСотрудников").ПолучитьДанные().Выгрузить();
ОтражениеВБухучетеСотрудникаПодробно = МенеджерВременныхТаблиц.Таблицы.Найти("ВТСведенияОБухучетеЗарплатыСотрудников").ПолучитьДанные().Выгрузить();
ВТПлановыеНачисленияСотрудников = МенеджерВременныхТаблиц.Таблицы.Найти("ВТПлановыеНачисленияСотрудников").ПолучитьДанные().Выгрузить();
КонецПроцедуры
ПОЛУЧИТЬ СВЕДЕНИЯ ОБ ОРГАНИЗАЦИИ
&НаСервере
Процедура СведенияОбОрганизацииНаСервере()
//Без передачи списка показателей возвращаются все доступные значения показатели
//Если нужно значение конкретного показателя см. подробнее ЗарплатаКадрыБазовый.ПолучитьСведенияОбОрганизации
СведенияОбОрганизации = ЗарплатаКадрыБазовый.ПолучитьСведенияОбОрганизации(Объект.Организация,ТекущаяДата(), );
КонецПроцедуры
<УДАЛИТЬ>
ДанныеФизЛица = КадровыйУчет.ДокументыФизическихЛиц(ВыборкаСтрок.ФизическоеЛицо, Истина);
ОбластьМакетаСтрока.Параметры.Паспорт = "" + ДанныеФизЛица[0].ВидДокумента + ", "
+ ДанныеФизЛица[0].Серия + ", " + ДанныеФизЛица[0].Номер + ", выдан: " + ДанныеФизЛица[0].КемВыдан;
ПОЛУЧИТЬ ОТВЕТСТВЕННЫХ ОРГАНИЗАЦИИ
ЗапрашиваемыеЗначения = Новый Структура;
ЗапрашиваемыеЗначения.Вставить("Организация", Объект.Документ.Организация);
ЗапрашиваемыеЗначения.Вставить("Руководитель");
ЗапрашиваемыеЗначения.Вставить("ДолжностьРуководителя");
ЗапрашиваемыеЗначения.Вставить("ГлавныйБухгалтер");
ЗапрашиваемыеЗначения.Вставить("РуководительКадровойСлужбы");
ЗапрашиваемыеЗначения.Вставить("ДолжностьРуководителяКадровойСлужбы");
ДатаВЗапросОтветственных = Объект.Документ.Дата;
//!!! ПОЗВОЛЯЕТ ПОЛУЧИТЬ ДАННЫЕ ТОЛЬКО НА ДАТУ СЕАНСА
ЗарплатаКадры.ПолучитьЗначенияПоУмолчанию(ЗапрашиваемыеЗначения, ДатаВЗапросОтветственных);
ФИОГлБух = "";
Если ФизическиеЛицаЗарплатаКадры.Просклонять(ЗапрашиваемыеЗначения.ГлавныйБухгалтер.Наименование, 3, ФИОГлБух,
?(ЗапрашиваемыеЗначения.ГлавныйБухгалтер.Пол = Перечисления.ПолФизическогоЛица.Мужской, 1, 2)) Тогда
//Область3.Параметры.ФИОГлБух = ФИОГлБух;
КонецЕсли;
ОбластьМакетаПриказ.Параметры.ФИОГлавныйБухгалтер = ФизическиеЛицаЗарплатаКадрыКлиентСервер.ФамилияИнициалы(ФИОГлБух);
ОбластьПодписиРуководитель.Параметры.ФИО = ФизическиеЛицаЗарплатаКадры.РасшифровкаПодписи(ЗапрашиваемыеЗначения.Руководитель);
ОбластьПодписиРуководитель.Параметры.Должность = ЗапрашиваемыеЗначения.ДолжностьРуководителя;
//ОТВЕТСТВЕННЫЕ ЛИЦА НА ЗАДАННУЮ ДАТУ
ДатаВЗапросОтветственных = ДАТА(2025,09,02);
ЗапрашиваемыеЗначения = СведенияОбОтветственныхЛицах.СведенияОбОтветственныхЛицах(Выборка.Организация, "Руководитель,ДолжностьРуководителя", ДатаВЗапросОтветственных);
ФУНКЦИИ ДЛЯ ОТРАЖЕНИЯ ДАННЫХ В ПЕЧАТНЫХ ФОРМАХ (ПРЕОБРАЗОВАНИЕ СТРОК)
ВЫВОД ИНИЦИАЛЫ ФАМИЛИЯ
ДанныеПечати.ФИОРуководителяСокращенное = ФизическиеЛицаЗарплатаКадры.РасшифровкаПодписи(ДанныеФИО);
ВЫВОД ФАМИЛИЯ ИНИЦИАЛЫ
ДанныеПечати.ФИОРуководителяСокращенное = ФизическиеЛицаЗарплатаКадрыКлиентСервер.ФамилияИнициалы(ДанныеДляПечатиСотрудники.ФизическоеЛицо)
СКЛОНЕНИЕ ФИО
РезультатСклонения = "";
Если ФизическиеЛицаЗарплатаКадры.Просклонять(Строка(Руководитель), 3, РезультатСклонения, Руководитель.Пол) Тогда
Шапка.Параметры.ФИОРуководителя = РезультатСклонения
КонецЕсли;
СКЛОНЕНИЕ ТЕКСТА
ОбластьПриказ.Параметры.Должность = СклонениеПредставленийОбъектов.ПросклонятьПредставление(Строка(ОбластьПриказ.Параметры.Должность), 3);
!!! Работает при включенной настройке "Склонение представлений объектов".
Обращение происходить к Веб-сервису "Морфер".
В бесплатном режиме есть ограничения.
Пример склонение фразы "календарных дней" в зависимости от числа:
КоличествоДней = СтрокаТЧ.КоличествоДней;
ПредставлениеДней = СокрЛП(СтрЗаменить(ЧислоПрописью(КоличествоДней, , "календарный,календарных,календарных,м,,,,,0"), ЧислоПрописью(КоличествоДней, , ",,,,,,,,0"), "")) + " " + СокрЛП(СтрЗаменить(ЧислоПрописью(КоличествоДней, , "день,дня,дней,м,,,,,0"), ЧислоПрописью(КоличествоДней, , ",,,,,,,,0"), ""));
ОбластьМакетаШапка.Параметры.ТекстКалендарныхДней = " " + ПредставлениеДней;
Пример. Платформенный метод. Склонение словосочетаний с числительными.
Позволяющая склонять словосочетания с числительным, предусмотрена в «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текст", вернет Неопределено.
//
// Возвращаемое значение:
// Число, Неопределено - Полученное число, либо Неопределено, если строка не является числом.
//
ВведеннаяОчередность = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(СтрокаТаблицы.ПредставлениеОчередности);
<УДАЛИТЬ>
// Удаляет префикс информационной базы и префикс организации из переданной строки НомерОбъекта.
// Переменная НомерОбъекта должна соответствовать шаблону: ООГГ-ХХХ...ХХ или ГГ-ХХХ...ХХ, где:
// ОО - префикс организации;
// ГГ - префикс информационной базы;
// "-" - разделитель;
// ХХХ...ХХ - номер/код объекта.
//
// Пример:
// УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Истина, Истина) = "000001234"
// УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Ложь, Истина) = "Ф-000001234"
// УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Истина, Ложь) = "ГЛ-000001234"
// УдалитьПрефиксыИзНомераОбъекта("0ФГЛ-000001234", Ложь, Ложь) = "ФГЛ-000001234"
ДокПрием.НомерДок = ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(СокрЛП(Объект.Номер), Истина, Истина);
// Получает номер документа для вывода на печать; из номера удаляются префиксы и лидирующие нули.
// Функция:
// отбрасывает префикс организации,
// отбрасывает префикс информационной базы (опционально),
// отбрасывает пользовательские префиксы (опционально),
// удаляет лидирующие нули в номере объекта.
ДокПрием.НомерДок = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СокрЛП(Объект.Номер), Истина, Истина);
ЗАПОЛНИТЬ ПЕРВОНАЧАЛЬНЫЕ ЗНАЧЕНИЯ НА ФОРМЕ (ОРГАНИЗАЦИЯ)
Процедура ПриСозданииНаСервере
ЗначенияДляЗаполнения = Новый Структура("Организация",
"Объект.Организация");
ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(ЭтаФорма, ЗначенияДляЗаполнения);
КонецПроцедуры
ПРОЦЕДУРЫ И ФУНКЦИИ БСП
ШАБЛОН ВНЕШНЕЙ ПЕЧАТНОЙ ФОРМЫ
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.ВерсияБСП = "2.1.3.2";
ПараметрыРегистрации.Вставить("Версия", "1.0");
//ПараметрыРегистрации.Вставить("Информация", "");
ПараметрыРегистрации.Назначение.Добавить("Документ.ВедомостьНаВыплатуЗарплатыПеречислением");
//ПараметрыРегистрации.Назначение.Добавить("Документ.*"); // все документы
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = Метаданные().Представление(); //Синоним
НоваяКоманда.Идентификатор = Метаданные().ПолноеИмя(); //ПолноеИмя
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.Модификатор = "ПечатьMXL"; // Обязательно
//НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
//НоваяКоманда.Представление = Метаданные().Представление();
//НоваяКоманда.Идентификатор = Метаданные().ПолноеИмя();
//НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
//
//НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
//НоваяКоманда.Представление = Метаданные().Представление();
//НоваяКоманда.Идентификатор = Метаданные().ПолноеИмя();
//НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Возврат ПараметрыРегистрации;
КонецФункции
// Формирует печатные формы
//
// Параметры:
// МассивОбъектов - Массив - ссылки на объекты, которые нужно распечатать;
// КоллекцияПечатныхФорм - ТаблицаЗначений - сформированные табличные документы
// (выходной параметр).
// ОбъектыПечати - СписокЗначений - значение - ссылка на объект;
// представление - имя области в которой был выведен объект
// (выходной параметр);
// ПараметрыВывода - Структура - дополнительные параметры сформированных табличных документов
// (выходной параметр);
//
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, Метаданные().ПолноеИмя(), НСтр(Метаданные().Представление()),
ПечатьСписокПеречислений(МассивОбъектов, ОбъектыПечати));
КонецПроцедуры
Функция ПечатьСписокПеречислений(МассивОбъектов, ОбъектыПечати)
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.КлючПараметровПечати = Метаданные().ПолноеИмя();
Макет = ПолучитьМакет("ПФ_MXL_СписокПеречисленийНаЛицевыеСчета");
// получаем данные для печати
ВыборкаШапок = ВыборкаДляПечатиШапки(МассивОбъектов);
ВыборкаСтрок = ВыборкаДляПечатиТаблицы(МассивОбъектов);
ПервыйДокумент = Истина;
Возврат ТабличныйДокумент;
КонецФункции
Подробнее о механизмах отчетов, обработок, печатных форм: //infostart.ru/public/558559/
ПРЕОБРАЗОВАНИЕ ДАННЫХ (ТАБЛИЦА ЗНАЧЕНИЙ, МАССИВ И Т.Д.)
ЗНАЧЕНИЕ В МАССИВ
// Создает массив и помещает в него переданное значение.
//
// Параметры:
// Значение - Произвольный - любое значение.
//
// Возвращаемое значение:
// Массив - массив из одного элемента.
МассивОбъектов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Значение);
ТАБЛИЦА ЗНАЧЕНИЙ В МАССИВ
// Преобразует таблицу значений в массив структур.
// Может использоваться для передачи на клиент данных в том случае, если таблица
// значений содержит только такие значения, которые могут
// быть переданы с сервера на клиент.
//
// Полученный массив содержит структуры, каждая из которых повторяет
// структуру колонок таблицы значений.
//
// Не рекомендуется использовать для преобразования таблиц значений
// с большим количеством строк.
//
// Параметры:
// ТаблицаЗначений - ТаблицаЗначений - исходная таблица значений.
//
// Возвращаемое значение:
// Массив - коллекция строк таблицы в виде структур.
МассивДанных = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаЗначений);
СТРОКА ТАБЛИЦЫ ЗНАЧЕНИЙ В СТРУКТУРУ
// Преобразует строку таблицы значений в структуру.
// Свойства структуры и их значения совпадают с колонками переданной строки.
//
// Параметры:
// СтрокаТаблицыЗначений - СтрокаТаблицыЗначений - строка таблицы значений.
//
// Возвращаемое значение:
// Структура - преобразованная строка таблицы значений.
//
СтруктураДанных = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(ТаблицаЗначений[0]);
ДОПОЛНИТЬ ТАБЛИЦУ ЗНАЧЕНИЙ ДАННЫМИ ИЗ МАССИВА
// Процедура дополняет таблицу значений Таблица значениями из массива Массив.
//
// Параметры:
// ПересчетФизическихЛиц - ТаблицаЗначений - таблица, которую необходимо заполнить значениями из массива;
// ФизическиеЛица - Массив - массив значений для заполнения таблицы;
// ИмяПоля - Строка - имя поля таблицы значений, в которое необходимо загрузить значения из массива.
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицуИзМассива(ПересчетФизическихЛиц, ФизическиеЛица, "ФизическоеЛицо");
ДОПОЛНИТЬ ТАБЛИЦУ ЗНАЧЕНИЙ ДАННЫМИ ИЗ ТАБЛИЦЫ ЗНАЧЕНИЙ
// Дополняет таблицу значений-приемник данными из таблицы значений-источник.
//
// Параметры:
// ТаблицаИсточник - ТаблицаЗначений - таблица, из которой будут браться строки для заполнения;
// ТаблицаПриемник - ТаблицаЗначений - таблица, в которую будут добавлены строки из таблицы-источника.
//
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СведенияОДоходахНДФЛ, ОблагаемыеНалогомДоходы);
СРАВНЕНИЕ ДАННЫХ СО СЛОЖНОЙ СТРУКТУРОЙ
// Сравнивает данные сложной структуры с учетом вложенности.
//
// Параметры:
// Данные1 - Структура, ФиксированнаяСтруктура,
// Соответствие, ФиксированноеСоответствие,
// Массив, ФиксированныйМассив,
// ХранилищеЗначения, ТаблицаЗначений,
// Строка, Число, Булево - сравниваемые данные.
//
// Данные2 - Произвольный - те же типы, что и для параметра Данные1.
//
// Возвращаемое значение:
// Булево - Истина, если совпадают.
ТаблицаДоИзменения = Запрос.Выполнить().Выгрузить();
ТаблицаПослеИзменения = Запрос.Выполнить().Выгрузить();
Если Не ОбщегоНазначения.ДанныеСовпадают(ТаблицаДоИзменения, ТаблицаПослеИзменения) Тогда
Результат.ЕстьИзменения = Истина;
КонецЕсли;
СВЕДЕНИЯ ОБ АДРЕСЕ В ВИДЕ СТРУКТУРУ (АДРЕС ИЗ XML В СТРУКТУРУ)
// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР.
//
// Параметры:
// Адрес - Строка, ОбъектXDTO - XDTO объект или строка XML соответствующие XDTO пакету Адрес.
// ДополнительныеПараметры - Структура - параметры контактной информации.
// * БезПредставлений - Булево - Если Истина, то поле представления адреса будет отсутствовать.
// * КодыКЛАДР - Булево - Если Истина, то возвращает структуру с кодами КЛАДР по всем частям адреса.
// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращает полное наименование адресных объектов.
// * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов.
// Возвращаемое значение:
// Структура - набор пар ключ-значение. Состав свойств для адреса
//Простой пример для начинающих
&НаСервере
Процедура ПроверитьАдресНаСервере()
ФизическоеЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию("Абакарова Мадина Сайдуллаевна");
Для каждого Строка Из ФизическоеЛицо.КонтактнаяИнформация Цикл
СведенияОбАдресе = РаботаСАдресами.СведенияОбАдресе(Строка.ЗначенияПолей);
КонецЦикла;
КонецПроцедуры
//Или
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
ДополнительныеПараметры = Новый Структура("НаименованиеВключаетСокращение", Истина);
ФактическийАдресСтруктура =
МодульРаботаСАдресами.СведенияОбАдресе(ФактическийАдресXML, ДополнительныеПараметры);
СООБЩЕНИЯ ПОЛЬЗОВАТЕЛЮ (ОПОВЕЩЕНИЕ, ПРОГРЕСС БАР)
&НаКлиенте
Процедура Заменить(Команда)
ЭтаФорма.Закрыть();
КоличествоЗаписей = 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) КАК Период,
ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка) КАК ФизическоеЛицо,
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК ГоловнойСотрудник,
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация,
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК ГоловнаяОрганизация,
ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность,
ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ПустаяСсылка) КАК ВидЗанятости,
"" КАК ФИОПолные,
"" КАК ФамилияИО,
"" КАК Фамилия,
"" КАК Имя,
"" КАК Отчество,
0 КАК ТарифнаяСтавка,
0 КАК ТекущаяТарифнаяСтавка,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаПриема,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаУвольнения
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников
ИЗ
ВТВсеПериодомКадровыхДанных КАК Сотрудники
ГДЕ
"ТолькоРазрешенные" = ИСТИНА
;
Представления_ОтработанноеВремя
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ДАТАВРЕМЯ(1, 1, 1) КАК МесяцНачисления,
ДАТАВРЕМЯ(1, 1, 1) КАК ПериодДействия,
НЕОПРЕДЕЛЕНО КАК Регистратор,
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация,
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение,
ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ПустаяСсылка) КАК ВидРасчета,
0 КАК ОтработаноДней,
0 КАК ОтработаноЧасов,
0 КАК ОтработаноДнейВПериоде,
0 КАК ОтработаноЧасовВПериоде,
0 КАК ОплаченоДней,
0 КАК ОплаченоЧасов,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаНачала,
ЗНАЧЕНИЕ(Справочник.СтатьиФинансированияЗарплата.ПустаяСсылка) КАК СтатьяФинансирования,
ЛОЖЬ КАК ВремяВЧасах,
ЗНАЧЕНИЕ(Справочник.СтатьиРасходовЗарплата.ПустаяСсылка) КАК СтатьяРасходов,
НЕОПРЕДЕЛЕНО КАК ДокументОснование,
0 КАК ИдентификаторСтроки
ПОМЕСТИТЬ Представления_ОтработанноеВремя
ИЗ
ВТНачисленияИУдержанияБезКадровыхДанных КАК НачисленияИУдержания
ГДЕ
"НачалоПериода" = &НачалоПериода
И "ОкончаниеПериода" = &КонецПериода
;
Список представлений действующих до релиза 3.1.10
Список представлений возможно будет актуален и на текущем релизе 3.1.11
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудниковАнализНачисленийИУдержаний |
ПОМЕСТИТЬ Представления_МестоВСтруктуреПредприятия |
ПОМЕСТИТЬ Представления_ОтработанноеВремя |
ПОМЕСТИТЬ Представления_Периоды |
ПОМЕСТИТЬ Представления_ПодразделенияСортировкиСотрудников |
ПОМЕСТИТЬ Представления_СвойстваСтатейФинансирования |
ПОМЕСТИТЬ Представления_ШтатноеРасписание |
ПОМЕСТИТЬ Представления_ДанныеУчетаВремениИСостоянийСотрудников |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников_ВсеКадровыеДанные |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников_Зарплата |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников_ПриПриеме |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников_СотрудникиОтчета |
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников_ФОТ |
ПОМЕСТИТЬ Представления_КадровыеДанныеФизическихЛиц |
ПОМЕСТИТЬ Представления_Периоды |
ПОМЕСТИТЬ Представления_Периоды_Месяца |
ПОМЕСТИТЬ Представления_Периоды_МесяцыОтчета |
ПОМЕСТИТЬ Представления_ПлановоеВремя |
ПОМЕСТИТЬ Представления_ПлановыеНачисленияСотрудников |
ПОМЕСТИТЬ Представления_ПлановыеУдержанияСотрудников |
ПОМЕСТИТЬ Представления_СвойстваСтатейФинансирования |
ПОМЕСТИТЬ Представления_СрезПоследних_ВидыЗанятостиСотрудников |
ПОМЕСТИТЬ Представления_СрезПоследних_ГрафикРаботыСотрудников |
ПОМЕСТИТЬ Представления_СрезПоследних_ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников |
ПОМЕСТИТЬ Представления_СрезПоследних_КадроваяИсторияСотрудников |
ПОМЕСТИТЬ Представления_СрезПоследних_ПлановыйФОТ |
ПОМЕСТИТЬ Представления_СрезПоследних_ПрименениеДополнительныхПериодическихПоказателейРасчетаЗарплатыСотрудников |
ПОМЕСТИТЬ Представления_СрезПоследних_СведенияОбИнвалидностиФизическихЛиц |
ПОМЕСТИТЬ Представления_СтажиСотрудников |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_ВидыЗанятостиСотрудников |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_ГрафикРаботыСотрудников |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_КадроваяИсторияСотрудников |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_ПлановыеНачисления |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_ПлановыйФОТ |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_СведенияОбИнвалидностиФизическихЛиц |
ПОМЕСТИТЬ Представления_ТаблицаРегистра_СостоянияВБракеФизическихЛиц |
ПОМЕСТИТЬ Представления_ТекущаяКадроваяРасстановка |
ПОМЕСТИТЬ Представления_ФактическиеОтпускаСотрудников |
ПОМЕСТИТЬ Представления_ШтатноеРасписание |
ПОМЕСТИТЬ Представления_ШтатноеРасписание_КонецПериода |
ПОМЕСТИТЬ Представления_ШтатноеРасписание_НачалоПериода |
ПОЛЕЗНЫЕ СТАТЬИ В РАМКАХ ТЕМЫ
Буду очень признателен, если Вы будите делиться своим опытом и найденными процедурами и функциями.
Так как адрес физ.лиц в ЗУП 3 хранится в виде XML, то довольно часто требуется получить структуру адреса, пользуюсь вот это типовой функцией, у меня она правда переделана, но суть понятна:
(2) Вы как более опытный специалист, не могли бы поделиться своими заметками?
Не у всех есть огромный опыт работы с конфигурацией.
(2) Вы все 1150 общих модулей предлагаете пролистать? Не считая прочих
Очень полезная статья, было бы очень здорово если вы поддерживали ее в актуальном состоянии и обновляли, не так давно все тоже самое приходилось рыскать самому.
(2) у вас есть возможность выложить свою выборку, годную не только для отчетов.
Но вы ею скорее всего не воспользуютесь, потому что гундеть на чужие статьи это одно, а написать свою это совсем другое.
Пример использования УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаРабочегоВремениСотрудников (данные, формирующие Т-13):
Показать
(6) совершенно верно, гундеть дело нужное и правильное — это хоть как-то может задержать вал Г-кода!
(8)а вы не выкладывайте Г-код, выкладывайте нормальный.
Смотрю вы на ходу показания меняете, то не устраивает количество функций, а теперь уже вы беспокоитесь за качество кода.
Сначала покажите свою компетентность, а потом критикуйте других. А так получается просто троллинг. Таких умников много, только их комментарии доверия не вызывают.
Эх, я только собрался писать похожую статью! Вообще, давно тема назрела.
(9) Я не нуждаюсь в вашем доверии. И тут выражают мнения.
Если с моим мнением кто-то не согласен, то это повод приводить контраргументы,
а не пенять на компетентность. Если бомбит — идите отчитайте своих подчиненных,
возьмите с них показания, наконец.
(11)
вот мои контраргументы:
человек постарался и выложил статью. Потратил свое свободное время на то, чтобы поделиться с другими.
Но ему пишут типа: молодец конечно, но это не то что нужно (а представленная выборка годна лишь для отчетов и слишком мелка). Это вы называете контраргументом? И где тут конструктив?
Каков итог? Он больше не будет ничего выкладывать, потому что осадок остается, и пропадает желание делиться с другими.
А мне как разработчику выгодно, чтобы появлялись такие статьи с наработками. Тем более, что у автора нет Г-кода, как вы его назвали. Лучше статьи зарабатывают высокий рейтинг и другие смогут использовать чужие наработки.
А теперь аргументируйте свое нытье. Если вы умеете рассуждать логически, то ожидаю от Вас контраргументов. А если это просто задето Ваше ЧСВ, то можете сделать из этого вывод или не сделать.
(7) Просто в качестве наблюдения, в БСП, на котором построен ЗУП и практически все современные конфигурации, есть много хороших функций, которые сокращают код, да и вообще радуют глаз, может пригодятся.
Например:
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Значение); // возвращает массив с элементом = Значение
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицуИзМассива(Таблица, Массив, ИмяПоля); // добавляет в таблицу строки и заполняет поле из массива
Функция, которая возвращает по сотрудникам их параметры отражения в учете (подразделения, способы отражения, статьи финасирования):
Для её использования нужно сохранить в менеджере временных таблиц таблицу сотрудников, для которых нужно получить сведения.
Ниже пример использования:
Показать
(15)
Просто Ваше мнение выглядит как чуть более детальное КГАМ. Пройди Вы мимо, пользы было ровно столько же.
(17) все верно, но почему это воспринимают в штыки я сам в шоке.
(15)могу сказать, что я своими комментариями убил двух зайцев
— Поддержал автора
— Дал обратную связь троллю, который в следующий раз возможно подумает, прежде чем критиковать других
И то и другое полезно для развития нашего с Вами сообщества.
А какой цели добились вы — решайте сами
СведенияОбОрганизации = РегламентированнаяОтчетностьВызовСервера.ПолучитьСведенияОбОрганизации(Выборка.Организация, Выборка.Дата, «<Параметры через запятую>»);
Список параметров Общий модуль ЗарплатаКадрыБазовый Функция ПолучитьСведенияОбОрганизации(Знач Организация, Знач ДатаЗначения = Неопределено, Знач СписокПоказателей = Неопределено) Экспорт
Р.S. Автор расширяй свою статью данными из комментариев. Будет бомба)
Статью дополняйте. Из комментариев в статью собирите. Вечером постараюсь выложить функции работы с временем. Получение отработанного времени и норм времени.
(6) При всём уважении, посыл в (2) верный. Большую часть полезных процедур я почерпнул анализируя модули, которые всплывали в процессе отладки, анализируя экспортные методы, имеющие описание интерфейса в комментарии. Приведённые приёмы в статье будут полезны для начинающих, но чаще требуется всё таки что-то вокруг расчётов – в комментариях увидел более интересную информацию.
(23)не готов с вами спорить по поводу полезности процедур, т.к. ЗУПа не касался уже много лет. Но судя по звездам полезность все таки присутствует.
Я для себя считаю, что сам такой формат статей полезен и его необходимо развивать. Т.к. не раз пользовался подобными статьями с Инфостарта, когда что-нибудь писал.
Поэтому я поддерживаю авторов, которые пишут в таком формате.
Кроме того, вы сами указали, что в комментариях есть более полезные (с вашей точки зрения) процедуры.
Вот только комментарии появились благодаря тому, что кто-то написал публикацию.
Если бы автор второго поста написал бы, что мол «выборка неполная, я бы еще добавил вот такую процедуру, такую и такую». И выложил свои примеры, то это был бы конструктив. Комментатору был бы респект.
Но критиковать других, не предлагая альтернативы, я считаю невежливо. Это уже не критика, а троллинг. Подобные комментарии получать к своим публикациям неприятно, и они демотивируют. Комментатор из (2) этого не понимает, т.к. он сам еще не написал ни одной статьи.
Ну и по поводу того, что нужно изучать модули — никто ж не спорит. Это приходится делать всем.
Просто некоторые процедуры приходится использовать чаще других. И подход, когда часто используемые процедуры вы ищете в своем блокноте, а не в конфигурации — экономит время. Автор вместо блокнота использует ИС, я тоже так делаю периодически.
А не подскажете — как при подобной верстке на печать текст статьи вывести? Спасибо
(25) Попробуйте раскрыть каждый из спойлеров, выделить нужный материал и вывести выделенное на печать. Правда не все влезает .
(1) Добавил процедуру в статью. Немного ее видоизменил.
(7) Спасибо за пример, добавил в статью.
(13) Спасибо за пример, добавил в статью.
Добрый день. Если мне надо получить данные по сотруднику, то пользуюсь механизмом ->https://infostart.ru/public/836840/
(7) Процедура УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаРабочегоВремениСотрудников выводит данные только за один месяц, а не знаете каким образом можно получить отработанное время за период, есть ли стандартная процедура получения подобных данных?
Актуально для регионов РКС:
Возвращает процент северной надбавки физического лица или сотрудника.
//
// Параметры:
// Объект — СправочникСсылка.Сотрудники, СправочникСсылка.ФизическиеЛица
// ДатаПолученияДанных
//
// ВозвращаемоеЗначение: Число
(31) Спасибо. Вы наверное имели ввиду функцию: КадровыйУчетРасширенный.ПроцентСевернойНадбавки(Объект, ДатаПолученияДанных)
Ребят, как получить ДлительностьИспытательногоСрока ? через КадровыеДанныеСотрудников не хочет — не знает такой реквизит. Раньше была функция КадровыйУчет.ДанныеТрудовыхДоговоров() а ее взяли и выпилили в последних версиях программы.
ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудник, ТекущаяДата(),,);
Не срабатывает, по причине того, что эта процедура не экспортная.Смотрел на 3.1.5 и 3.1.7
(35) Сделал копированием. Однако интересный подход у 1С , взять и на пустом месте закрыть доступ к нужным вещам
Коллеги, не подскажет кто, есть ли типовая функция для получения расчетной базы удержаний?
(38) стоит посмотреть на процедуру РассчитатьЗначениеПоказателяРасчетнаяБазаУдержаний (Обработки.МенеджерРасчетаЗарплаты)
(39) Смотрел, спасибо. Но там на входе уже есть заполненный МенеджерВременныхТаблиц, и покуда до этой процедуры дойдет, уже прошла куча расчетов с этим менеджером, 48 таблиц рассчитано.
(40) мне кажется, выцепить эту процедуру не реально, быстрее и проще написать свой запрос.
Этими запросами часть данных берется из уже начисленных документов, а часть из документа начисления, а затем все это объединятся в одну таблицу.
(41) Да, там полная жесть творится в этих МенеджерахРасчетаЗарплаты,Времени,РасчетнойБазы. Что-то отловить очень трудно, т.к. передача данных идет вся через МенеджерВременныхТаблиц, а этот менеджер еще болтается между несколькими обработками и общими модулями.
Думал, есть готовая ф-ия по типу указанных в публикации, было бы удобно.
(16)
Добавил процедуру в статью. Только для редакции 3.1.8 пришлось немного изменить запрос.
(20)
(37) Добавил функцию в статью.
Отличная статья, особенно для тех, кто редко работает с подобными задачами.
запомню
Господа разработчики ЗУП имеют тенденцию перетряхивать программный интерфейс. Так что все что тут написано, возможно, уже неактуально в ЗУП 3.1.8. Полагаться на их программный интерфейс себе дороже.
Например, почему-то они ликвидировали функцию ДанныеТрудовыхДоговоров из общего модуля КадровыйУчет.
(40) Не подскажите — каким инструментом это получено?
Автору огромное спасибо, однозначно плюс!!! Коллеги, подобные статьи делают наш труд легче, а зарабатывание денег проще ))) В типовых конфигурациях информацию приходится собирать по крупицам и любая помощь всегда на вес золота.
(48) Отладчик же, Shift+F9 по строке МенеджерВременныхТаблиц
(47)
ДанныеТрудовыхДоговоров — процедура, описанная в области #СлужебныеПроцедурыИФункции.
Разработчики обещали обратную совместимость только для методов, описанных в области #ПрограммныйИнтерфейс
(51)Мне об этом обещании ничего неизвестно.
Вот если бы были комментарии к этим областям было бы другое дело.
(52) Как-то так
(47)
Да не только разработчики ЗУП.. В той же КА/ЕРП/УТ толком пользоваться ИХ АПИ для себя в долгосрочной перспективе всегда ведет к тому, что они что-нибудь переименуют/исправят ошибку в названии функции/ поменяют формат входных данных..
Но с другой стороны — рисовать свои функции может быть еще хуже, ибо можно что-то не учесть в расчетах, это раз. А два — все равно метаданные/алгоритмы будут меняться, и вероятность того, что свой код станет не рабочим не меньше той, что нерабочим станет код с использованием типовых процедур..
Респект! Тут мини-перепись балаболов форумных… По себе знаю, что нужно далеко не один день изучать ЗУП, чтобы понять какие функции можно использовать, а какие нет. Была бы подобная статья полгода назад, существенно бы облегчила работу.
Спасибо за статью.
Спасибо за статью! В цвет!
Программное получение начислений, взносов, НДФЛ, удержаний и т.д. – в общем всё то, что рассчитывается в документе начисления зарплаты (проверял на ЗУП 3.1.8.246):
Показать
Доброго времени суток. Код использованный для получения данных табеля Т-13 некорректен.
Возвращает таблицу с «плановым» временем по графику, т.е. как сотрудник работал, если бы ничего не происходило. Отклонения (отпуска, болезни и т.д.) не учитываются.
Для получения фактических данных использовал процедуру
Параметр «ПараметрыЗаполнения» определяется тут:
Релиз 3.1.9.159
(59) Точно! Соответственно, решается вопрос в (30) — СоздатьВТДанныеУчетаВремениИСостоянийСотрудников возвращает все дни за период. Исправьте пожалуйста:
Показать
Функция, позволяющая получить работающих сотрудников по заданным параметрам отбора
работает некорректно в случае, если в регистре сведений «Данные для подбора сотрудников» нет записи с видом события «Увольнение» по сотруднику, который по факту уволен. У нас такие сотрудники вылезли после переноса из старой базы (думается мне, что была кривая обработка по переносу).
В этом случае данный сотрудник будет считаться трудоустроенным.
Также данного сотрудника нельзя будет выбрать, например, в расчетном листке, если указана организация. База просто не видит этого сотрудника.
Доброго времени суток.
Релиз 3.1.9.187. Получение действующих плановых начислений для списка сотрудников не сработает, т.к. функция не экспортная.
(62) Выше писали: скопируйте себе эту функцию да и всё
(63) Точно… затупил…
Ребята у меня вопрос по поводу Получить данные среднего заработка, остатка отпусков, резерва отпусков. Я использовала её для получения данных для печати Подробного расчета начислений, но я не совсем поняла как заполняется индексация.
1. Статья нужная, плюс однозначно. Автору респект.
2. Как получить с помощью типовых функций периоды работы сотрудника в подразделениях? Там вроде везде только ДатаПриема и ДатаУвольнения. Может что пропустил конечно.
Спасибо. Очень полезно и познавательно.
(66)
Мне кажется нужная для вас информация содержится в Регистре сведений Кадровая история сотрудников.
Выводится простым запросом.
(68) Как получить кадровую историю запросом я знаю. У меня даже есть процедура, добавляющая в менеджер временных таблиц таблицу с кадровой историей
с блэкджеком ис учётом особенностей компании.Меня интересует, можно ли получить её с помощью типовых функций. Мы же теперь вроде как API используем?
Кстати, для пункта «Получить работающих сотрудников по заданным параметрам отбора», в строке
Сотрудник и ФизическоеЛицо можно убрать, т.к. это «предопределенные» колонки в возвращаемой ТЗ. Если оставить как есть, то в ТЗ будут колонки Сотрудник, ФизическоеЛицо, Сотрудник1, ФизическоеЛицо1.
Отличная подборка!
…может загнать ее в html -файл как это было в книге «Простые примеры разработки» ?
А там и до книги недалего.. )
(2) В ЗУП 3.1 свыше 21 тысячи экспортных процедур/функций. За день вдумчиво пролистать? Ну-ну.
(73) не вижу сложности.
все таки считаю, что изучать модули и функции проще и удобнее именно в дереве конфигурации.
а эту поделку можно использовать ну разве что один раз для создания реперных точек у себя в голове если вы полный новичок в конфигурации. С опытом дерево модулей удобнее.
(74) Понятно дело, что изучать функции придется в конфигурации. Но во-первых, это дело не одного дня. Во-вторых, когда нужна конкретная информация, а времени в обрез, то вдумчивое изучение всех модулей/функций не вариант. Результат (в виде отчета/обработки) нужен уже сейчас.
(75) для меня такие отчеты это информационный мусор, исключая реперные точки для первичной оценки.
если вам непонятна моя картина мира, то вряд ли имеет смысл открывать ее более чем.
(60) Всем привет, в дополнение к указанному коду рекомендую к использованию остальные ВТ текущего МенеджерВременныхТаблиц, вот список:
ВТСотрудники
ВТПериодыРаботыСотрудников
ВТМесяцы
ВТСотрудникиМесяцы
ВТПериодыДействияГрафиковДляКалендарей
ВТСоответствиеСостоянийВидамУчетаВремени
ВТДатыСостояний
ВТПараметрыЗарегистрированныхДанныхУчетаВремени
ВТСотрудникСРассчитаннымиДанными
ВТПараметрыПолученияДанныхПоСотрудникам
ВТЗарегистрированныеВидыДанныхУчетаВремени
ВТИспользуемыеВидыДанных
ВТВытесняющиеВидыДанных
ВТВспомогательнаяТаблицаОпределенияУстановленныхДнейПериода
ВТИспользуемыеИсточникиДанныхНеотфильтрованные
ВТИсточникиПолученияДанныхУчетаВремени
ВТИзмеренияДатыДляСрезаГрафиков
ВТГрафикРаботыСотрудниковСрезПоследних
ВТГрафикРаботыСотрудниковСрезПервых
ВТГрафикРаботыСотрудников
ВТГрафикРаботыСотрудниковСрезПоследнихДополненный
ВТГрафикиСотрудниковСрезИДвижения
ВТИнтервалыГрафиков
ВТПериодыДейсвияОбщихГрафиковСотрудников
ВТОбщиеГрафики
ВТДанныеОбщихГрафиков
ВТДанныеРегистровУчетаВремени
ВТНормаВремени
ВТДанныеУчетаРабочегоВремениСотрудников
ВТСостоянияСотрудников
ВТДанныеУчетаВремениПоСостояниям
ВТДанныеУчетаВремениИСостоянийСотрудников
(60)
Дополню важный нюанс, если запрашиваете данные за произвольный период, тогда необходимо указать начало месяца в МесяцДатаНачала, иначе данные за неполный месяц начала посчитаны не будут. Однако дата переданная в МесяцДатаОкончания произвольным числом даст итоги по неполному месяцу.
——
Версия ЗКГУ 3.1.9.205
(2) Потратить время перечитать. Вышел новый релиз. Опять это надо делать.
Пока не успокоится там с модулями. Бесполезное занятие.
(79) доколе! Вот в 7.7. был один глобальный модуль, а теперь сиди перечитывай, да.
Комрады, привет. Мне нужно из ЗУП 3.1 (3.1.10.78), получить данные по начислениям и удержаниям по всем организациям. Эти данные нужно залить в УТ 10.3 (для управленческого учета). Делать буду через com регл. заданием с загрузкой в специальный РС. Что-то вроде, Расчетного листка. Подскажите, пожалуйста, в конфигурации есть готовые модули для этого, какими можно воспользоваться? Спасибо
Добрый день! Может кому-то попадалась функция по расчету стоимости часа сотрудника (или списка сотрудников)?
Добрый день. Подскажите, может есть стандартная функция, чтобы получить данные по начислениям и отработанным часам сотрудника в разрезе подразделений и должностей. Проблема в том, что сотрудники в пределах одного месяца перемещаются между должностями внутри подразделения. В регистре НачисленияУдержанияПоСотрудникам нет информации о должности сотрудника по которой происходит начисление. Оплату по окладу возможно и удастся получить, т.к. в НачисленияУдержанияПоСотрудникам есть дата с которой действует данное начисление, а вот начисления премии регистрируется за период в целом, за весь месяц. Посоветуйте как получить начисленные суммы и отработанные часы в разрезе подразделений и должностей.
(84)
Вопрос решён.
(13) У Вас ошибка в коде, надо так:
У меня в организации у нескольких человек нет индексации и по «счастливому совпадению» они в списке оказывались. Долго не могла понять почему по одному сотруднику средний считается правильно, а по нескольким — средний без индексации получается.
(65) Это видимо и на Ваш вопрос ответ.
(65) Исправьте строчку одну
Вместо
ДополнительныеПараметры.Индексации = ДанныеДляРасчета.ДанныеОбИндексации;
надо
ДополнительныеПараметры.Индексации = ДанныеДляРасчетаСорудник.ДанныеОбИндексации;
(86) Спасибо за уточнение! Поправлю.
(85) Поделитесь, пожалуйста, как Вы его решили. Тоже актуально.
(89) Если коротко: взял запрос из стандартного отчета «Анализ з/п по сотрудникам в целом за период». Но проблему премий он не решает. Премии распределял пропорционально основному заработку.
(82) посмотри (58)
для склонения можно еще использовать платформенный метод ПолучитьСклоненияСтроки()
Практически все, что выводится в расчетном листке, можно получить следующим кодом:
Показать
В статью внесены ряд изменений, исправлений и добавлен блок с полезными статьями на тему ЗУП/ЗКГУ 3.1.
Может кому пригодится. Если есть, что дополнить, пишите.