Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке

В статье размещен список стандартных процедур и функций с примерами, которые могут помочь при разработке (доработке) конфигураций Зарплата и управление персоналом ред. 3.1 и Зарплата и кадры государственного учреждения 3.1.
Иногда бывает довольно сложно правильно получить данные или долго, поэтому лучшим вариантом будет использование стандартных процедур.
Буду очень признателен, если Вы поделитесь своим опытом и предложите свои варианты стандартных процедур которые помогают в работе. Или предложите, как дополнить имеющиеся процедуры.
 

ПОЛУЧИТЬ ДАННЫЕ ПОЗИЦИИ ШТАТНОГО РАСПИСАНИЯ

 

ПОЛУЧИТЬ ДЕЙСТВУЮЩИЕ ПЛАНОВЫЕ НАЧИСЛЕНИЯ НА ДАТУ

 

ПОЛУЧИТЬ РАЗЛИЧНЫЕ КАДРОВЫЕ ДАННЫЕ

 

ПОЛУЧИТЬ КАДРОВЫЕ ДАННЫЕ СОТРУДНИКА

 

ПОЛУЧИТЬ СТАЖИ СОТРУДНИКОВ

 

ПОЛУЧИТЬ ОСНОВНОГО СОТРУДНИКА ФИЗИЧЕСКОГО ЛИЦА

 

ПОЛУЧИТЬ ПАСПОРТНЫЕ ДАННЫЕ ФИЗИЧЕСКОГО ЛИЦА

 

ПОЛУЧИТЬ РАБОТАЮЩИХ СОТРУДНИКОВ ПО ЗАДАННЫМ ПАРАМЕТРАМ ОТБОРА

 

ПОЛУЧИТЬ ДАННЫЕ РАБОЧЕГО (ОТРАБОТАННОГО) ВРЕМЕНИ, ДАННЫЕ ТАБЕЛЯ Т-13

 

ПОЛУЧИТЬ ДАННЫЕ СРЕДНЕГО ЗАРАБОТКА, ОСТАТКА ОТПУСКОВ, РЕЗЕРВА ОТПУСКОВ

 

ПОЛУЧИТЬ ДАННЫЕ БУХГАЛТЕРСКОГО УЧЕТА (ОРГАНИЗАЦИИ, ПОДРАЗДЕЛЕНИЯ, СОТРУДНИКА, НАЧИСЛЕНИЯ)

 

ПОЛУЧИТЬ СВЕДЕНИЯ ОБ ОРГАНИЗАЦИИ

 

<УДАЛИТЬ> 

 

ПОЛУЧИТЬ ОТВЕТСТВЕННЫХ ОРГАНИЗАЦИИ

 

ФУНКЦИИ ДЛЯ ОТРАЖЕНИЯ ДАННЫХ В ПЕЧАТНЫХ ФОРМАХ (ПРЕОБРАЗОВАНИЕ СТРОК)

 

ВЫВОД ИНИЦИАЛЫ ФАМИЛИЯ

 

ВЫВОД ФАМИЛИЯ ИНИЦИАЛЫ

 

СКЛОНЕНИЕ ФИО

 

СКЛОНЕНИЕ ТЕКСТА

 

УДАЛИТЬ ПРЕФИКС НОМЕРА ОБЪЕКТА И ЛИДИРУЮЩИЕ НУЛИ (СПРАВОЧНИКА, ДОКУМЕНТА)

 

ПРЕОБРАЗОВАТЬ СТРОКУ В ДАТУ

 

ПРЕОБРАЗОВАТЬ СТРОКУ В ЧИСЛО

 

<УДАЛИТЬ>

 

ЗАПОЛНИТЬ ПЕРВОНАЧАЛЬНЫЕ ЗНАЧЕНИЯ НА ФОРМЕ (ОРГАНИЗАЦИЯ)

 

ПРОЦЕДУРЫ И ФУНКЦИИ БСП

 

ШАБЛОН ВНЕШНЕЙ ПЕЧАТНОЙ ФОРМЫ

 

ПРЕОБРАЗОВАНИЕ ДАННЫХ (ТАБЛИЦА ЗНАЧЕНИЙ, МАССИВ И Т.Д.)

 

ЗНАЧЕНИЕ В МАССИВ

 

ТАБЛИЦА ЗНАЧЕНИЙ В МАССИВ

 

СТРОКА ТАБЛИЦЫ ЗНАЧЕНИЙ В СТРУКТУРУ

 

ДОПОЛНИТЬ ТАБЛИЦУ ЗНАЧЕНИЙ ДАННЫМИ ИЗ МАССИВА

 

ДОПОЛНИТЬ ТАБЛИЦУ ЗНАЧЕНИЙ ДАННЫМИ ИЗ ТАБЛИЦЫ ЗНАЧЕНИЙ

 

СРАВНЕНИЕ ДАННЫХ СО СЛОЖНОЙ СТРУКТУРОЙ

 

СВЕДЕНИЯ ОБ АДРЕСЕ В ВИДЕ СТРУКТУРУ (АДРЕС ИЗ XML В СТРУКТУРУ)

 

СООБЩЕНИЯ ПОЛЬЗОВАТЕЛЮ (ОПОВЕЩЕНИЕ, ПРОГРЕСС БАР)

 

ПРОГРАММНОЕ ОТКРЫТИЕ ФОРМ

 

СПИСОК РЕГИСТРОВ МЕХАНИЗМА ПРЕДСТАВЛЕНИЙ

Список регистров представлений актуален для релиза 3.1.11.133

 

Представления_Периоды

 

Представления_КадровыеДанныеСотрудников

 

Представления_ОтработанноеВремя

 

Список представлений действующих до релиза 3.1.10

Буду очень признателен, если Вы будите делиться своим опытом и найденными процедурами и функциями.

91 Comments

  1. lord_soth

    Так как адрес физ.лиц в ЗУП 3 хранится в виде XML, то довольно часто требуется получить структуру адреса, пользуюсь вот это типовой функцией, у меня она правда переделана, но суть понятна:

    АдресСтруктура = МодульРаботаСАдресами.СведенияОбАдресе(АдресXML, ДополнительныеПараметры);
    Reply
  2. GeterX

    (2) Вы как более опытный специалист, не могли бы поделиться своими заметками?

    Не у всех есть огромный опыт работы с конфигурацией.

    Reply
  3. the1

    (2) Вы все 1150 общих модулей предлагаете пролистать? Не считая прочих

    Reply
  4. Malfarion

    Очень полезная статья, было бы очень здорово если вы поддерживали ее в актуальном состоянии и обновляли, не так давно все тоже самое приходилось рыскать самому.

    Reply
  5. json

    (2) у вас есть возможность выложить свою выборку, годную не только для отчетов.

    Но вы ею скорее всего не воспользуютесь, потому что гундеть на чужие статьи это одно, а написать свою это совсем другое.

    Reply
  6. SlavaKron

    Пример использования УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаРабочегоВремениСотрудников (данные, формирующие Т-13):

    &НаСервере
    Процедура Команда1НаСервере()
    ПараметрыПолученияДанных = УчетРабочегоВремениРасширенный.ПараметрыПолученияДанныхУчетаВремени();
    ДатаНачала = ‘20181001’;
    ДатаОкончания = КонецМесяца(ДатаНачала);
    ПараметрыПолученияДанных.ДатаНачала = ДатаНачала;
    ПараметрыПолученияДанных.ДатаОкончания = ДатаОкончания;
    
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    МассивСотрудников = Новый Массив;
    МассивСотрудников.Добавить(Справочники.Сотрудники.НайтиПоНаименованию(«Иванов Иван Иванович»));
    СоздатьВТСотрудники(МенеджерВременныхТаблиц, МассивСотрудников, ДатаНачала);
    УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаРабочегоВремениСотрудников(МенеджерВременныхТаблиц, Истина, ПараметрыПолученияДанных);
    ТЗ = МенеджерВременныхТаблиц.Таблицы.Найти(«ВТДанныеУчетаРабочегоВремениСотрудников»).ПолучитьДанные().Выгрузить()
    КонецПроцедуры
    
    &НаКлиенте
    Процедура Команда1(Команда)
    Команда1НаСервере();
    КонецПроцедуры
    
    &НаСервереБезКонтекста
    Процедура СоздатьВТСотрудники(МенеджерВременныхТаблиц, МассивСотрудников, Месяц, ДатаАктуальности = Неопределено, ДатаНачала = Неопределено, ДатаОкончания = Неопределено)
    ТаблицаСотрудники = Новый ТаблицаЗначений;
    ТаблицаСотрудники.Колонки.Добавить(«Сотрудник», Новый ОписаниеТипов(«СправочникСсылка.Сотрудники»));
    ТаблицаСотрудники.Колонки.Добавить(«Месяц», Новый ОписаниеТипов(«Дата»));
    ТаблицаСотрудники.Колонки.Добавить(«ДатаАктуальности», Новый ОписаниеТипов(«Дата»));
    ТаблицаСотрудники.Колонки.Добавить(«ДатаНачала», Новый ОписаниеТипов(«Дата»));
    ТаблицаСотрудники.Колонки.Добавить(«ДатаОкончания», Новый ОписаниеТипов(«Дата»));
    
    Для Каждого Сотрудник Из МассивСотрудников Цикл
    СтрокаСотрудники = ТаблицаСотрудники.Добавить();
    СтрокаСотрудники.Сотрудник = Сотрудник;
    КонецЦикла;
    
    ТаблицаСотрудники.ЗаполнитьЗначения(Месяц, «Месяц»);
    ТаблицаСотрудники.ЗаполнитьЗначения(?(ДатаАктуальности = Неопределено, ТекущаяДата(), ДатаАктуальности), «ДатаАктуальности»);
    ТаблицаСотрудники.ЗаполнитьЗначения(?(ДатаНачала = Неопределено, Месяц, ДатаНачала), «ДатаНачала»);
    ТаблицаСотрудники.ЗаполнитьЗначения(?(ДатаОкончания = Неопределено, КонецМесяца(Месяц), ДатаОкончания), «ДатаОкончания»);
    
    Запрос = Новый Запрос(
    «ВЫБРАТЬ
    | ТаблицаСотрудники.Сотрудник,
    | ТаблицаСотрудники.Месяц,
    | ТаблицаСотрудники.ДатаАктуальности,
    | ТаблицаСотрудники.ДатаНачала,
    | ТаблицаСотрудники.ДатаОкончания
    |ПОМЕСТИТЬ ВТСотрудники
    |ИЗ
    | &ТаблицаСотрудники КАК ТаблицаСотрудники»);
    
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    Запрос.УстановитьПараметр(«ТаблицаСотрудники», ТаблицаСотрудники);
    Запрос.Выполнить();
    КонецПроцедуры

    Показать

    Reply
  7. VmvLer

    (6) совершенно верно, гундеть дело нужное и правильное — это хоть как-то может задержать вал Г-кода!

    Reply
  8. json

    (8)а вы не выкладывайте Г-код, выкладывайте нормальный.

    Смотрю вы на ходу показания меняете, то не устраивает количество функций, а теперь уже вы беспокоитесь за качество кода.

    Сначала покажите свою компетентность, а потом критикуйте других. А так получается просто троллинг. Таких умников много, только их комментарии доверия не вызывают.

    Reply
  9. fxmike

    Эх, я только собрался писать похожую статью! Вообще, давно тема назрела.

    Reply
  10. VmvLer

    (9) Я не нуждаюсь в вашем доверии. И тут выражают мнения.

    Если с моим мнением кто-то не согласен, то это повод приводить контраргументы,

    а не пенять на компетентность. Если бомбит — идите отчитайте своих подчиненных,

    возьмите с них показания, наконец.

    Reply
  11. json

    (11)

    вот мои контраргументы:

    человек постарался и выложил статью. Потратил свое свободное время на то, чтобы поделиться с другими.

    Но ему пишут типа: молодец конечно, но это не то что нужно (а представленная выборка годна лишь для отчетов и слишком мелка). Это вы называете контраргументом? И где тут конструктив?

    Каков итог? Он больше не будет ничего выкладывать, потому что осадок остается, и пропадает желание делиться с другими.

    А мне как разработчику выгодно, чтобы появлялись такие статьи с наработками. Тем более, что у автора нет Г-кода, как вы его назвали. Лучше статьи зарабатывают высокий рейтинг и другие смогут использовать чужие наработки.

    А теперь аргументируйте свое нытье. Если вы умеете рассуждать логически, то ожидаю от Вас контраргументов. А если это просто задето Ваше ЧСВ, то можете сделать из этого вывод или не сделать.

    Reply
  12. fxmike
    Reply
  13. fxmike

    (7) Просто в качестве наблюдения, в БСП, на котором построен ЗУП и практически все современные конфигурации, есть много хороших функций, которые сокращают код, да и вообще радуют глаз, может пригодятся.

    Например:

    ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Значение); // возвращает массив с элементом = Значение

    ОбщегоНазначенияКлиентСервер.ДополнитьТаблицуИзМассива(Таблица, Массив, ИмяПоля); // добавляет в таблицу строки и заполняет поле из массива

    Reply
  14. Skin123

    Функция, которая возвращает по сотрудникам их параметры отражения в учете (подразделения, способы отражения, статьи финасирования):

    ОтражениеЗарплатыВБухучете.СоздатьВТСведенияОБухучетеЗарплатыСотрудников();

    Для её использования нужно сохранить в менеджере временных таблиц таблицу сотрудников, для которых нужно получить сведения.

    Ниже пример использования:

    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
    
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    
    Запрос.Текст =
    «ВЫБРАТЬ
    | ТаблицаСотрудников.Сотрудник,
    | ТаблицаСотрудников.Период,
    | ТаблицаСотрудников.Подразделение
    |ПОМЕСТИТЬ ВТСотрудники
    |ИЗ
    | &ТаблицаСотрудников КАК ТаблицаСотрудников»;
    
    Запрос.УстановитьПараметр(«ТаблицаСотрудников», ТаблицаСотрудников);
    Запрос.Выполнить();
    
    ОтражениеЗарплатыВБухучете.СоздатьВТСведенияОБухучетеЗарплатыСотрудников(МенеджерВременныхТаблиц, «ВТСотрудники», «Сотрудник,Период», Организация);
    

    Показать

    Reply
  15. fxmike

    (15)

    Просто Ваше мнение выглядит как чуть более детальное КГАМ. Пройди Вы мимо, пользы было ровно столько же.

    Reply
  16. VmvLer

    (17) все верно, но почему это воспринимают в штыки я сам в шоке.

    Reply
  17. json

    (15)могу сказать, что я своими комментариями убил двух зайцев

    — Поддержал автора

    — Дал обратную связь троллю, который в следующий раз возможно подумает, прежде чем критиковать других

    И то и другое полезно для развития нашего с Вами сообщества.

    А какой цели добились вы — решайте сами

    Reply
  18. NatalkaBal

    СведенияОбОрганизации = РегламентированнаяОтчетностьВызовСервера.ПолучитьСведенияОбОрганизации(Выборка.Организация, Выборка.Дата, «<Параметры через запятую>»);

    Список параметров Общий модуль ЗарплатаКадрыБазовый Функция ПолучитьСведенияОбОрганизации(Знач Организация, Знач ДатаЗначения = Неопределено, Знач СписокПоказателей = Неопределено) Экспорт

    Р.S. Автор расширяй свою статью данными из комментариев. Будет бомба)

    Reply
  19. Dmitry77

    Статью дополняйте. Из комментариев в статью собирите. Вечером постараюсь выложить функции работы с временем. Получение отработанного времени и норм времени.

    Reply
  20. SlavaKron

    (6) При всём уважении, посыл в (2) верный. Большую часть полезных процедур я почерпнул анализируя модули, которые всплывали в процессе отладки, анализируя экспортные методы, имеющие описание интерфейса в комментарии. Приведённые приёмы в статье будут полезны для начинающих, но чаще требуется всё таки что-то вокруг расчётов – в комментариях увидел более интересную информацию.

    Reply
  21. json

    (23)не готов с вами спорить по поводу полезности процедур, т.к. ЗУПа не касался уже много лет. Но судя по звездам полезность все таки присутствует.

    Я для себя считаю, что сам такой формат статей полезен и его необходимо развивать. Т.к. не раз пользовался подобными статьями с Инфостарта, когда что-нибудь писал.

    Поэтому я поддерживаю авторов, которые пишут в таком формате.

    Кроме того, вы сами указали, что в комментариях есть более полезные (с вашей точки зрения) процедуры.

    Вот только комментарии появились благодаря тому, что кто-то написал публикацию.

    Если бы автор второго поста написал бы, что мол «выборка неполная, я бы еще добавил вот такую процедуру, такую и такую». И выложил свои примеры, то это был бы конструктив. Комментатору был бы респект.

    Но критиковать других, не предлагая альтернативы, я считаю невежливо. Это уже не критика, а троллинг. Подобные комментарии получать к своим публикациям неприятно, и они демотивируют. Комментатор из (2) этого не понимает, т.к. он сам еще не написал ни одной статьи.

    Ну и по поводу того, что нужно изучать модули — никто ж не спорит. Это приходится делать всем.

    Просто некоторые процедуры приходится использовать чаще других. И подход, когда часто используемые процедуры вы ищете в своем блокноте, а не в конфигурации — экономит время. Автор вместо блокнота использует ИС, я тоже так делаю периодически.

    Reply
  22. lexushka

    А не подскажете — как при подобной верстке на печать текст статьи вывести? Спасибо

    Reply
  23. GeterX

    (25) Попробуйте раскрыть каждый из спойлеров, выделить нужный материал и вывести выделенное на печать. Правда не все влезает .

    (1) Добавил процедуру в статью. Немного ее видоизменил.

    Reply
  24. GeterX

    (7) Спасибо за пример, добавил в статью.

    Reply
  25. GeterX

    (13) Спасибо за пример, добавил в статью.

    Reply
  26. Hla

    Добрый день. Если мне надо получить данные по сотруднику, то пользуюсь механизмом -> https://infostart.ru/public/836840/

    Reply
  27. GeterX

    (7) Процедура УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаРабочегоВремениСотрудников выводит данные только за один месяц, а не знаете каким образом можно получить отработанное время за период, есть ли стандартная процедура получения подобных данных?

    Reply
  28. alexalexme

    Актуально для регионов РКС:

    РазмерСН = ПроцентСевернойНадбавки(Объект, ДатаПолученияДанных)

    Возвращает процент северной надбавки физического лица или сотрудника.

    //

    // Параметры:

    // Объект — СправочникСсылка.Сотрудники, СправочникСсылка.ФизическиеЛица

    // ДатаПолученияДанных

    //

    // ВозвращаемоеЗначение: Число

    Reply
  29. GeterX

    (31) Спасибо. Вы наверное имели ввиду функцию: КадровыйУчетРасширенный.ПроцентСевернойНадбавки(Объект, ДатаПолученияДанных)

    Reply
  30. Malfarion

    Ребят, как получить ДлительностьИспытательногоСрока ? через КадровыеДанныеСотрудников не хочет — не знает такой реквизит. Раньше была функция КадровыйУчет.ДанныеТрудовыхДоговоров() а ее взяли и выпилили в последних версиях программы.

    Reply
  31. haereticus
    Плановые начисления для списка сотрудников

    ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудник, ТекущаяДата(),,);

    Не срабатывает, по причине того, что эта процедура не экспортная.Смотрел на 3.1.5 и 3.1.7

    Reply
  32. GeterX
    Reply
  33. haereticus

    (35) Сделал копированием. Однако интересный подход у 1С , взять и на пустом месте закрыть доступ к нужным вещам

    Reply
  34. user_2010
    Reply
  35. the1

    Коллеги, не подскажет кто, есть ли типовая функция для получения расчетной базы удержаний?

    Reply
  36. GeterX

    (38) стоит посмотреть на процедуру РассчитатьЗначениеПоказателяРасчетнаяБазаУдержаний (Обработки.МенеджерРасчетаЗарплаты)

    Reply
  37. the1

    (39) Смотрел, спасибо. Но там на входе уже есть заполненный МенеджерВременныхТаблиц, и покуда до этой процедуры дойдет, уже прошла куча расчетов с этим менеджером, 48 таблиц рассчитано.

    Reply
  38. GeterX

    (40) мне кажется, выцепить эту процедуру не реально, быстрее и проще написать свой запрос.

    Этими запросами часть данных берется из уже начисленных документов, а часть из документа начисления, а затем все это объединятся в одну таблицу.

    Reply
  39. the1

    (41) Да, там полная жесть творится в этих МенеджерахРасчетаЗарплаты,Времени,РасчетнойБазы. Что-то отловить очень трудно, т.к. передача данных идет вся через МенеджерВременныхТаблиц, а этот менеджер еще болтается между несколькими обработками и общими модулями.

    Думал, есть готовая ф-ия по типу указанных в публикации, было бы удобно.

    Reply
  40. GeterX

    (16)

    СоздатьВТСведенияОБухучетеЗарплатыСотрудников

    Добавил процедуру в статью. Только для редакции 3.1.8 пришлось немного изменить запрос.

    Reply
  41. GeterX

    (20)

    (37) Добавил функцию в статью.

    Reply
  42. krollzlat

    Отличная статья, особенно для тех, кто редко работает с подобными задачами.

    Reply
  43. German_Tagil

    запомню

    Reply
  44. Rusleg

    Господа разработчики ЗУП имеют тенденцию перетряхивать программный интерфейс. Так что все что тут написано, возможно, уже неактуально в ЗУП 3.1.8. Полагаться на их программный интерфейс себе дороже.

    Например, почему-то они ликвидировали функцию ДанныеТрудовыхДоговоров из общего модуля КадровыйУчет.

    Reply
  45. leosoft

    (40) Не подскажите — каким инструментом это получено?

    Reply
  46. sansys

    Автору огромное спасибо, однозначно плюс!!! Коллеги, подобные статьи делают наш труд легче, а зарабатывание денег проще ))) В типовых конфигурациях информацию приходится собирать по крупицам и любая помощь всегда на вес золота.

    Reply
  47. the1

    (48) Отладчик же, Shift+F9 по строке МенеджерВременныхТаблиц

    Reply
  48. laperuz

    (47)

    ДанныеТрудовыхДоговоров — процедура, описанная в области #СлужебныеПроцедурыИФункции.

    Разработчики обещали обратную совместимость только для методов, описанных в области #ПрограммныйИнтерфейс

    Reply
  49. Rusleg

    (51)Мне об этом обещании ничего неизвестно.

    Вот если бы были комментарии к этим областям было бы другое дело.

    Reply
  50. laperuz

    (52) Как-то так

    Reply
  51. AlX0id

    (47)

    Да не только разработчики ЗУП.. В той же КА/ЕРП/УТ толком пользоваться ИХ АПИ для себя в долгосрочной перспективе всегда ведет к тому, что они что-нибудь переименуют/исправят ошибку в названии функции/ поменяют формат входных данных..

    Но с другой стороны — рисовать свои функции может быть еще хуже, ибо можно что-то не учесть в расчетах, это раз. А два — все равно метаданные/алгоритмы будут меняться, и вероятность того, что свой код станет не рабочим не меньше той, что нерабочим станет код с использованием типовых процедур..

    Reply
  52. d4rkmesa

    Респект! Тут мини-перепись балаболов форумных… По себе знаю, что нужно далеко не один день изучать ЗУП, чтобы понять какие функции можно использовать, а какие нет. Была бы подобная статья полгода назад, существенно бы облегчила работу.

    Reply
  53. user619273_alevtina

    Спасибо за статью.

    Reply
  54. alanto23

    Спасибо за статью! В цвет!

    Reply
  55. SlavaKron

    Программное получение начислений, взносов, НДФЛ, удержаний и т.д. – в общем всё то, что рассчитывается в документе начисления зарплаты (проверял на ЗУП 3.1.8.246):

    &НаСервереБезКонтекста
    Процедура ПолучитьДанныеНачисленийНаСервере(МассивСотрудников, ДатаНачала, ДатаОкончания, Организация)
    ДополнительныеПараметры = РасчетЗарплатыРасширенный.ДополнительныеПараметрыЗаполненияТаблицДокумента();
    ДополнительныеПараметры.Сотрудники = МассивСотрудников;
    ДополнительныеПараметры.ОкончаниеПериода = ДатаОкончания;
    ДополнительныеПараметры.РежимНачисления = Перечисления.РежимНачисленияЗарплаты.ОкончательныйРасчет;
    
    ПараметрыОписания = Новый Структура;
    ПараметрыОписания.Вставить(«ИзменениеБезОграничений» ,Истина);
    ПараметрыОписания.Вставить(«РегистрацияНачисленийДоступна», Истина);
    ПараметрыОписания.Вставить(«СпособыРасчетаСреднегоЗаработка», Неопределено);
    ПараметрыОписания.Вставить(«ПризнакКомпенсацииУдержанияОтпуска», Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.НеИспользовать);
    ОписаниеДокумента = КадровыйУчетРасширенныйКлиентСервер.ОписаниеДокумента(ПараметрыОписания);
    
    ДанныеНачислений = РасчетЗарплатыРасширенный.ДанныеДляЗаполненияТаблицДокумента(ОписаниеДокумента, Организация, ДатаНачала, ДополнительныеПараметры);
    КонецПроцедуры

    Показать

    Reply
  56. Somaha

    Доброго времени суток. Код использованный для получения данных табеля Т-13 некорректен.

    УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаРабочегоВремениСотрудников(МенеджерВременныхТаблиц, Истина, ПараметрыПолученияДанных);

    Возвращает таблицу с «плановым» временем по графику, т.е. как сотрудник работал, если бы ничего не происходило. Отклонения (отпуска, болезни и т.д.) не учитываются.

    Для получения фактических данных использовал процедуру

    УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников(МенеджерВременныхТаблиц, Истина, ПараметрыЗаполнения);

    Параметр «ПараметрыЗаполнения» определяется тут:

    УчетРабочегоВремениРасширенный.ПараметрыДляЗапросВТДанныеУчетаВремениИСостоянийСотрудников();

    Релиз 3.1.9.159

    Reply
  57. SlavaKron

    (59) Точно! Соответственно, решается вопрос в (30) — СоздатьВТДанныеУчетаВремениИСостоянийСотрудников возвращает все дни за период. Исправьте пожалуйста:

    &НаСервере
    Процедура Команда1НаСервере()
    
    ПараметрыПолученияДанных = УчетРабочегоВремениРасширенный.ПараметрыДляЗапросВТДанныеУчетаВремениИСостоянийСотрудников();
    ПараметрыПолученияДанных.ДатаНачала = Период.ДатаНачала;
    ПараметрыПолученияДанных.ДатаОкончания = Период.ДатаОкончания;
    
    ПараметрыПолученияДанных.МесяцДатаНачала = Период.ДатаНачала;
    ПараметрыПолученияДанных.МесяцДатаОкончания = Период.ДатаОкончания;
    ПараметрыПолученияДанных.ДатаАктуальности = ТекущаяДата();
    
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    СоздатьВТСотрудники(МенеджерВременныхТаблиц, СписокСотрудников.ВыгрузитьЗначения(), Период.ДатаНачала, Период.ДатаОкончания);
    
    УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников(МенеджерВременныхТаблиц, Истина, ПараметрыПолученияДанных);
    ТЗ = МенеджерВременныхТаблиц.Таблицы.Найти(«ВТДанныеУчетаВремениИСостоянийСотрудников»).ПолучитьДанные().Выгрузить();
    ТЗ.Сортировать(«Дата»);
    
    КонецПроцедуры
    
    &НаКлиенте
    Процедура Команда1(Команда)
    Команда1НаСервере();
    КонецПроцедуры
    
    &НаСервереБезКонтекста
    Процедура СоздатьВТСотрудники(МенеджерВременныхТаблиц, МассивСотрудников, ДатаНачала, ДатаОкончания)
    ТаблицаСотрудники = Новый ТаблицаЗначений;
    ТаблицаСотрудники.Колонки.Добавить(«Сотрудник», Новый ОписаниеТипов(«СправочникСсылка.Сотрудники»));
    ТаблицаСотрудники.Колонки.Добавить(«ДатаНачала», Новый ОписаниеТипов(«Дата»));
    ТаблицаСотрудники.Колонки.Добавить(«ДатаОкончания», Новый ОписаниеТипов(«Дата»));
    
    Для Каждого Сотрудник Из МассивСотрудников Цикл
    СтрокаСотрудники = ТаблицаСотрудники.Добавить();
    СтрокаСотрудники.Сотрудник = Сотрудник;
    КонецЦикла;
    
    ТаблицаСотрудники.ЗаполнитьЗначения(ДатаНачала, «ДатаНачала»);
    ТаблицаСотрудники.ЗаполнитьЗначения(ДатаОкончания, «ДатаОкончания»);
    
    Запрос = Новый Запрос(
    «ВЫБРАТЬ
    | ТаблицаСотрудники.Сотрудник,
    | ТаблицаСотрудники.ДатаНачала,
    | ТаблицаСотрудники.ДатаОкончания
    |ПОМЕСТИТЬ ВТСотрудники
    |ИЗ
    | &ТаблицаСотрудники КАК ТаблицаСотрудники»);
    
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    Запрос.УстановитьПараметр(«ТаблицаСотрудники», ТаблицаСотрудники);
    Запрос.Выполнить();
    КонецПроцедуры

    Показать

    Reply
  58. tamepjlah

    Функция, позволяющая получить работающих сотрудников по заданным параметрам отбора

    ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения);

    работает некорректно в случае, если в регистре сведений «Данные для подбора сотрудников» нет записи с видом события «Увольнение» по сотруднику, который по факту уволен. У нас такие сотрудники вылезли после переноса из старой базы (думается мне, что была кривая обработка по переносу).

    В этом случае данный сотрудник будет считаться трудоустроенным.

    Также данного сотрудника нельзя будет выбрать, например, в расчетном листке, если указана организация. База просто не видит этого сотрудника.

    Reply
  59. Somaha

    Доброго времени суток.

    Релиз 3.1.9.187. Получение действующих плановых начислений для списка сотрудников не сработает, т.к. функция не экспортная.

    ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудник, ТекущаяДата(),,);
    Reply
  60. haereticus

    (62) Выше писали: скопируйте себе эту функцию да и всё

    Reply
  61. Somaha

    (63) Точно… затупил…

    Reply
  62. Centa96

    Ребята у меня вопрос по поводу Получить данные среднего заработка, остатка отпусков, резерва отпусков. Я использовала её для получения данных для печати Подробного расчета начислений, но я не совсем поняла как заполняется индексация.

    Reply
  63. mikeA

    1. Статья нужная, плюс однозначно. Автору респект.

    2. Как получить с помощью типовых функций периоды работы сотрудника в подразделениях? Там вроде везде только ДатаПриема и ДатаУвольнения. Может что пропустил конечно.

    Reply
  64. kievol

    Спасибо. Очень полезно и познавательно.

    Reply
  65. GeterX

    (66)

    Может что пропустил конечно.

    Мне кажется нужная для вас информация содержится в Регистре сведений Кадровая история сотрудников.

    Выводится простым запросом.

    Reply
  66. mikeA

    (68) Как получить кадровую историю запросом я знаю. У меня даже есть процедура, добавляющая в менеджер временных таблиц таблицу с кадровой историей с блэкджеком и с учётом особенностей компании.

    Меня интересует, можно ли получить её с помощью типовых функций. Мы же теперь вроде как API используем?

    Reply
  67. GeterX
    Reply
  68. Somaha

    Кстати, для пункта «Получить работающих сотрудников по заданным параметрам отбора», в строке

    ПараметрыПолучения.КадровыеДанные = «Сотрудник,ФизическоеЛицо,Подразделение,Должность,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ВидЗанятости,ДатаПриема,ДатаУвольнения,ГрафикРаботы»;

    Сотрудник и ФизическоеЛицо можно убрать, т.к. это «предопределенные» колонки в возвращаемой ТЗ. Если оставить как есть, то в ТЗ будут колонки Сотрудник, ФизическоеЛицо, Сотрудник1, ФизическоеЛицо1.

    Reply
  69. graphbuh

    Отличная подборка!

    …может загнать ее в html -файл как это было в книге «Простые примеры разработки» ?

    А там и до книги недалего.. )

    Reply
  70. SanchoD

    (2) В ЗУП 3.1 свыше 21 тысячи экспортных процедур/функций. За день вдумчиво пролистать? Ну-ну.

    Reply
  71. VmvLer

    (73) не вижу сложности.

    все таки считаю, что изучать модули и функции проще и удобнее именно в дереве конфигурации.

    а эту поделку можно использовать ну разве что один раз для создания реперных точек у себя в голове если вы полный новичок в конфигурации. С опытом дерево модулей удобнее.

    Reply
  72. SanchoD

    (74) Понятно дело, что изучать функции придется в конфигурации. Но во-первых, это дело не одного дня. Во-вторых, когда нужна конкретная информация, а времени в обрез, то вдумчивое изучение всех модулей/функций не вариант. Результат (в виде отчета/обработки) нужен уже сейчас.

    Reply
  73. VmvLer

    (75) для меня такие отчеты это информационный мусор, исключая реперные точки для первичной оценки.

    если вам непонятна моя картина мира, то вряд ли имеет смысл открывать ее более чем.

    Reply
  74. user1235208

    (60) Всем привет, в дополнение к указанному коду рекомендую к использованию остальные ВТ текущего МенеджерВременныхТаблиц, вот список:

    ВТСотрудники

    ВТПериодыРаботыСотрудников

    ВТМесяцы

    ВТСотрудникиМесяцы

    ВТПериодыДействияГрафиковДляКалендарей

    ВТСоответствиеСостоянийВидамУчетаВремени

    ВТДатыСостояний

    ВТПараметрыЗарегистрированныхДанныхУчетаВремени

    ВТСотрудникСРассчитаннымиДанными

    ВТПараметрыПолученияДанныхПоСотрудникам

    ВТЗарегистрированныеВидыДанныхУчетаВремени

    ВТИспользуемыеВидыДанных

    ВТВытесняющиеВидыДанных

    ВТВспомогательнаяТаблицаОпределенияУстановленныхДнейПериода

    ВТИспользуемыеИсточникиДанныхНеотфильтрованные

    ВТИсточникиПолученияДанныхУчетаВремени

    ВТИзмеренияДатыДляСрезаГрафиков

    ВТГрафикРаботыСотрудниковСрезПоследних

    ВТГрафикРаботыСотрудниковСрезПервых

    ВТГрафикРаботыСотрудников

    ВТГрафикРаботыСотрудниковСрезПоследнихДополненный

    ВТГрафикиСотрудниковСрезИДвижения

    ВТИнтервалыГрафиков

    ВТПериодыДейсвияОбщихГрафиковСотрудников

    ВТОбщиеГрафики

    ВТДанныеОбщихГрафиков

    ВТДанныеРегистровУчетаВремени

    ВТНормаВремени

    ВТДанныеУчетаРабочегоВремениСотрудников

    ВТСостоянияСотрудников

    ВТДанныеУчетаВремениПоСостояниям

    ВТДанныеУчетаВремениИСостоянийСотрудников

    Reply
  75. user1235208

    (60)

    ПараметрыПолученияДанных.МесяцДатаНачала = Период.ДатаНачала;

    Дополню важный нюанс, если запрашиваете данные за произвольный период, тогда необходимо указать начало месяца в МесяцДатаНачала, иначе данные за неполный месяц начала посчитаны не будут. Однако дата переданная в МесяцДатаОкончания произвольным числом даст итоги по неполному месяцу.

    ПараметрыПолученияДанных.ДатаНачала = Период.ДатаНачала  //Оставляем без изменений
    ПараметрыПолученияДанных.МесяцДатаНачала = НачалоМесяца(Период.ДатаНачала);
    

    ——

    Версия ЗКГУ 3.1.9.205

    Reply
  76. NoRazum

    (2) Потратить время перечитать. Вышел новый релиз. Опять это надо делать.

    Пока не успокоится там с модулями. Бесполезное занятие.

    Reply
  77. VmvLer

    (79) доколе! Вот в 7.7. был один глобальный модуль, а теперь сиди перечитывай, да.

    Reply
  78. user1235208
    Reply
  79. DoctorRoza

    Комрады, привет. Мне нужно из ЗУП 3.1 (3.1.10.78), получить данные по начислениям и удержаниям по всем организациям. Эти данные нужно залить в УТ 10.3 (для управленческого учета). Делать буду через com регл. заданием с загрузкой в специальный РС. Что-то вроде, Расчетного листка. Подскажите, пожалуйста, в конфигурации есть готовые модули для этого, какими можно воспользоваться? Спасибо

    Reply
  80. lemni

    Добрый день! Может кому-то попадалась функция по расчету стоимости часа сотрудника (или списка сотрудников)?

    Reply
  81. artem_savonin

    Добрый день. Подскажите, может есть стандартная функция, чтобы получить данные по начислениям и отработанным часам сотрудника в разрезе подразделений и должностей. Проблема в том, что сотрудники в пределах одного месяца перемещаются между должностями внутри подразделения. В регистре НачисленияУдержанияПоСотрудникам нет информации о должности сотрудника по которой происходит начисление. Оплату по окладу возможно и удастся получить, т.к. в НачисленияУдержанияПоСотрудникам есть дата с которой действует данное начисление, а вот начисления премии регистрируется за период в целом, за весь месяц. Посоветуйте как получить начисленные суммы и отработанные часы в разрезе подразделений и должностей.

    Reply
  82. artem_savonin

    (84)

    Вопрос решён.

    Reply
  83. lushka

    (13) У Вас ошибка в коде, надо так:

    ДополнительныеПараметры.Индексации = ДанныеДляРасчетаСотрудник.ДанныеОбИндексации;

    У меня в организации у нескольких человек нет индексации и по «счастливому совпадению» они в списке оказывались. Долго не могла понять почему по одному сотруднику средний считается правильно, а по нескольким — средний без индексации получается.

    (65) Это видимо и на Ваш вопрос ответ.

    Reply
  84. lushka

    (65) Исправьте строчку одну

    Вместо

    ДополнительныеПараметры.Индексации = ДанныеДляРасчета.ДанныеОбИндексации;

    надо

    ДополнительныеПараметры.Индексации = ДанныеДляРасчетаСорудник.ДанныеОбИндексации;

    Reply
  85. fxmike

    (86) Спасибо за уточнение! Поправлю.

    Reply
  86. gsnls15

    (85) Поделитесь, пожалуйста, как Вы его решили. Тоже актуально.

    Reply
  87. artem_savonin

    (89) Если коротко: взял запрос из стандартного отчета «Анализ з/п по сотрудникам в целом за период». Но проблему премий он не решает. Премии распределял пропорционально основному заработку.

    Reply
  88. lg2marvel

    (82) посмотри (58)

    Reply
  89. payta

    для склонения можно еще использовать платформенный метод ПолучитьСклоненияСтроки()

    Reply
  90. ktibomail

    Практически все, что выводится в расчетном листке, можно получить следующим кодом:

    АнализНачисленийИУдержаний = Отчеты.АнализНачисленийИУдержаний.Создать();
    
    ДополнительныеПоля = АнализНачисленийИУдержаний.ДополнительныеПоляПредставлений();
    
    // Удаляем из ДополнительныеПоля все, кроме нужных (в данном случае это ДолжностьПоШтатномуРасписанию)
    ТЗ = ДополнительныеПоля.Представления_КадровыеДанныеСотрудниковАнализНачисленийИУдер­жаний;
    Для Индекс = -ТЗ.Количество()+1 По 0 Цикл
    Если ТЗ[-Индекс].ИмяПоля <> «ДолжностьПоШтатномуРасписанию» Тогда
    ТЗ.Удалить(-Индекс);
    КонецЕсли;
    КонецЦикла;
    
    ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(АнализНачисленийИУдержаний, ДополнительныеПоля);
    АнализНачисленийИУдержаний.ИнициализироватьОтчет();
    
    // Удаляем лишние отборы
    ТекстЗапроса = АнализНачисленийИУдержаний.СхемаКомпоновкиДанных.НаборыДанных.НачисленияУдержанияОбъединенные.Элементы.НачисленияУдержания.Запрос;
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, «И НЕ ВзаиморасчетыССотрудниками.Регистратор В (&ИсключаемыеСсылки)», «»);
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, «И НЕ НачисленияИУдержания.Регистратор В (&ИсключаемыеСсылки)», «»);
    
    // Через построитель устанавливаем нужные отборы (период и физлица)
    ПостроительЗапроса = Новый ПостроительЗапроса(ТекстЗапроса);
    ПостроительЗапроса.Параметры.Вставить(«НачалоПериода», НачалоМесяца(Период));
    ПостроительЗапроса.Параметры.Вставить(«КонецПериода», КонецМесяца(Период));
    ПостроительЗапроса.Параметры.Вставить(«ОкончаниеИнтервалаПредставленияПериоды», ДобавитьМесяц(КонецМесяца(Период),60));
    ПостроительЗапроса.Параметры.Вставить(«МаксимальнаяДата», Дата(3999,12,31,23,59,59));
    
    ЭлементОтбора = ПостроительЗапроса.Отбор.Добавить(«ФизическоеЛицо»);
    ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке;
    ЭлементОтбора.Использование = Истина;
    СписокЗначенийФизлица = Новый СписокЗначений;
    СписокЗначенийФизлица.ЗагрузитьЗначения(Физлица);
    ЭлементОтбора.Значение = СписокЗначенийФизлица;
    
    Запрос = ПостроительЗапроса.ПолучитьЗапрос();
    МенеджерВТ = Новый МенеджерВременныхТаблиц;
    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
    
    // Результат в ТЗ
    ТЗ = Запрос.Выполнить().Выгрузить();

    Показать

    Reply
  91. GeterX

    В статью внесены ряд изменений, исправлений и добавлен блок с полезными статьями на тему ЗУП/ЗКГУ 3.1.

    Может кому пригодится. Если есть, что дополнить, пишите.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *