ЗУП. Актуальные сведения о должности и подразделении в списке справочника Сотрудники

25.10.12

Разработка - Инструментарий разработчика

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
АктуализацияСведенийОСотрудниках.epf
.epf 6,20Kb
64
64 Скачать (1 SM) Купить за 1 850 руб.

Прелюдия. Вот решили наши кадровики оформить реорганизацию и подготовили сразу пачку приказов будущим периодом, но всё не стоит на месте, и им приходится править ещё не вступившие в силу приказы. Wink Смотрят они в справочник и ничего уже понять не могут. Cry

 

Описание проблемы. Для отображения в списке справочника Сотрудники организации сведений о должности и подразделении работника 1С:ЗУП использует вспомогательные реквизиты справочника. К сожалению, штатно не предусмотрено поддержание их в актуальном состоянии на текущий день. Исправить этот недочёт достаточно просто.

 

Облегчим жизнь кадровикам вот таким кодом (можно воспользоваться приложенной обработкой):

            Запрос = Новый Запрос;

            Запрос.Текст =

                        "ВЫБРАТЬ

                        |           РаботникиОрганизацийСрезПоследних.Должность,

                        |           РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации,

                        |           СотрудникиОрганизаций.Ссылка,

                        |           СотрудникиОрганизаций.ТекущееПодразделениеОрганизации,

                        |           СотрудникиОрганизаций.ТекущаяДолжностьОрганизации

                        |           ИЗ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций

                        |                       СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ТекущаяДата) КАК РаботникиОрганизацийСрезПоследних

                        |                                  ПО РаботникиОрганизацийСрезПоследних.Сотрудник = СотрудникиОрганизаций.Ссылка";

            Запрос.УстановитьПараметр("ТекущаяДата", КонецДня(ТекущаяДата()));

            Результат = Запрос.Выполнить();

 

            ВыборкаДетальныеЗаписи = Результат.Выбрать();

 

            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

                        Актуализирован = Ложь;

                        Если Не ВыборкаДетальныеЗаписи.Должность = ВыборкаДетальныеЗаписи.ТекущаяДолжностьОрганизации Тогда

                                   Сотрудник = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();

                                   Сотрудник.ТекущаяДолжностьОрганизации = ВыборкаДетальныеЗаписи.Должность;

                                   Актуализирован = Истина;

                        КонецЕсли;

                        Если Не ВыборкаДетальныеЗаписи.ПодразделениеОрганизации = ВыборкаДетальныеЗаписи.ТекущееПодразделениеОрганизации Тогда

                                   Если ПустаяСтрока(Сотрудник) Тогда

                                               Сотрудник = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();

                                   КонецЕсли;

                                    Сотрудник.ТекущееПодразделениеОрганизации = ВыборкаДетальныеЗаписи.ПодразделениеОрганизации;

                                   Актуализирован = Истина;

                        КонецЕсли;

                       

                        Если Актуализирован Тогда

                                   Сотрудник.ПолучитьКадровыеДанныеФизлица = Ложь;

                                    Сотрудник.Записать();

                        КонецЕсли;

            КонецЦикла;

 

А себе облегчим жизнь создав регламентное задание, которое будет раз в день актуализировать данные.

 

ЗЫ В описании решения букв больше чем в самом решении. Cool

 

 

 

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    172087    964    403    

924

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14663    109    46    

108

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 руб.

06.10.2023    17347    43    15    

75

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

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

9360 руб.

17.05.2024    27370    96    48    

138

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

15000 руб.

10.11.2023    11957    45    33    

67

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

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

4800 3840 руб.

14.01.2013    191346    1153    0    

920

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18117    7    32    

42

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1153    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. AHDP 8 26.10.12 10:22 Сейчас в теме
Для регламентного задания, только актуализирующего состояние справочника следует использовать этот код:

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

Запрос.УстановитьПараметр("ТекущаяДата", КонецДня(ТекущаяДата()));
ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сотрудник = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
Сотрудник.ТекущаяДолжностьОрганизации = ВыборкаДетальныеЗаписи.Должность;
Сотрудник.ТекущееПодразделениеОрганизации = ВыборкаДетальныеЗаписи.ПодразделениеОрганизации;
Сотрудник.ПолучитьКадровыеДанныеФизлица = Ложь;
Сотрудник.Записать();
КонецЦикла;
2. elf78 26.10.12 12:01 Сейчас в теме
В общее-то эта информация есть и обновляется при проведении кадровых документов. В справочнике СотрудниковОрганизации есть реквизиты ТекущееПодразделениеОрганизации и ТекущаяДолжностьОрганизации, в которые пишутся актуальные данные при проведении по регистру сведений Работники организаций с помощью процедуры Общего модуля "ПолныеПраваЗК"
// В процедуре всем сотрудникам, которые есть в документе регистраторе,
// устанавливаются текущие кадровые данные
// Перед записью данных необходимо отобрать данные без учета регистратора
// При записи данных необходимо отбирать данные с учетом регистратора
//
Процедура ЗаписатьТекущиеКадровыеДанныеСотрудникаОрганизации(Отказ, Замещение, БезРегистратора, Регистратор) Экспорт

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

Запрос.УстановитьПараметр("Регистратор", Регистратор);

Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РаботникиОрганизаций.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
|ГДЕ
| РаботникиОрганизаций.Регистратор = &Регистратор
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| Сотрудники.Сотрудник,
| ВЫБОР
| КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА РаботникиОрганизацийСрезПоследних.ОбособленноеПодразделение
| ИНАЧЕ РаботникиОрганизацийСрезПоследних.ОбособленноеПодразделениеЗавершения
| КОНЕЦ КАК ОбособленноеПодразделение,
| ВЫБОР
| КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации
| ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизацииЗавершения
| КОНЕЦ КАК ПодразделениеОрганизации,
| ВЫБОР
| КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА РаботникиОрганизацийСрезПоследних.Должность
| ИНАЧЕ РаботникиОрганизацийСрезПоследних.ДолжностьЗавершения
| КОНЕЦ КАК Должность,
| ЕСТЬNULL(РаботникиОрганизацийПрием.Период, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаПриемаНаРаботу,
| ВЫБОР
| КОГДА ЕСТЬNULL(РаботникиОрганизацийУвольнение.Период, ДАТАВРЕМЯ(1, 1, 1)) = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА ДАТАВРЕМЯ(1, 1, 1)
| ИНАЧЕ ДОБАВИТЬКДАТЕ(РаботникиОрганизацийУвольнение.Период, ДЕНЬ, -1)
| КОНЕЦ КАК ДатаУвольнения
|ИЗ
| ВТСотрудники КАК Сотрудники
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(
| ,
| Сотрудник В
| (ВЫБРАТЬ
| Сотрудники.Сотрудник
| ИЗ
| ВТСотрудники КАК Сотрудники)
| " + ?(БезРегистратора, "И Регистратор <> &Регистратор", "") + ") КАК РаботникиОрганизацийСрезПоследних
| ПО Сотрудники.Сотрудник = РаботникиОрганизацийСрезПоследних.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизацийПрием
| ПО Сотрудники.Сотрудник = РаботникиОрганизацийПрием.Сотрудник
| И (ВЫБОР
| КОГДА РаботникиОрганизацийПрием.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА РаботникиОрганизацийПрием.ПричинаИзмененияСостояния
| ИНАЧЕ РаботникиОрганизацийПрием.ПричинаИзмененияСостоянияЗавершения
| КОНЕЦ = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу))
| " + ?(БезРегистратора, "И (РаботникиОрганизацийПрием.Регистратор <> &Регистратор)", "") + "
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизацийУвольнение
| ПО Сотрудники.Сотрудник = РаботникиОрганизацийУвольнение.Сотрудник
| И (ВЫБОР
| КОГДА РаботникиОрганизацийУвольнение.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА РаботникиОрганизацийУвольнение.ПричинаИзмененияСостояния
| ИНАЧЕ РаботникиОрганизацийУвольнение.ПричинаИзмененияСостоянияЗавершения
| КОНЕЦ = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение))
| " + ?(БезРегистратора, "И (РаботникиОрганизацийУвольнение.Регистратор <> &Регистратор)", "") + "
|ГДЕ
| (Сотрудники.Сотрудник.ТекущееОбособленноеПодразделение <> ЕСТЬNULL(ВЫБОР
| КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА РаботникиОрганизацийСрезПоследних.ОбособленноеПодразделение
| ИНАЧЕ РаботникиОрганизацийСрезПоследних.ОбособленноеПодразделениеЗавершения
| КОНЕЦ, ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка))
| ИЛИ Сотрудники.Сотрудник.ТекущееПодразделениеОрганизации <> ЕСТЬNULL(ВЫБОР
| КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации
| ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизацииЗавершения
| КОНЕЦ, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка))
| ИЛИ Сотрудники.Сотрудник.ТекущаяДолжностьОрганизации <> ЕСТЬNULL(ВЫБОР
| КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА РаботникиОрганизацийСрезПоследних.Должность
| ИНАЧЕ РаботникиОрганизацийСрезПоследних.ДолжностьЗавершения
| КОНЕЦ, ЗНАЧЕНИЕ(Справочник.ДолжностиОрганизаций.ПустаяСсылка))
| ИЛИ Сотрудники.Сотрудник.ДатаПриемаНаРаботу <> ЕСТЬNULL(РаботникиОрганизацийПрием.Период, ДАТАВРЕМЯ(1, 1, 1))
| ИЛИ Сотрудники.Сотрудник.ДатаУвольнения <> ЕСТЬNULL(РаботникиОрганизацийУвольнение.Период, ДАТАВРЕМЯ(1, 1, 1)))";

Выборка = Запрос.Выполнить().Выбрать();

УстановитьРеквизитыИЗаписатьСотрудникаОрганизации(Выборка, Отказ);

КонецПроцедуры
3. AHDP 8 26.10.12 12:09 Сейчас в теме
elf78, Вы не внимательно прочитали анотацию. Предлагеаемое регламентное задание и предназначено для борьбы с "последствиями" указанного вами алгориртма.
ЗЫ Оно родилось из обработки, разгребавшей "кадровые" истории.
5. petrov_al 10 27.10.12 12:53 Сейчас в теме
(3) а вот такая ситуация 01.10.2012 у сотрудника было текущее подразделение "А". С 02.10.2012 сотрудника перевели приказом в подразделение "В" с периодом завершения 03.10.2012. Какое текущее подразделение будет в справочнике сотрудники и какое фактически допустим 04.10.2012? Помоему у вас в запросе это неучитывается.
4. elf78 26.10.12 12:35 Сейчас в теме
Понятно.. я смотрю в российском ЗУП нет последовательности кадровых документов
6. chmv 29.10.12 12:47 Сейчас в теме
7. mikhailovaew 127 20.11.12 11:49 Сейчас в теме
А в древних релизах ЗУП в справочнике Сотрудники отображались актуальные должность и подразделение, не из реквизитов, а динамически рассчитываемые... Потом от этого отказались. "Это поведения было отменено как излишне ресурсоемкое более трех лет назад. Показ "актуальных" данных приводит к проблемам с пролистыванием списка сотрудников."
8. mip128 06.07.13 11:46 Сейчас в теме
А с ГПХшниками что ты делаешь?
9. Gasilin 46 04.06.14 14:41 Сейчас в теме
Полезное регламентное задание. В частности в карточке сотрудника при временном перемещении пишет должность завершения, а не текущую.
+
Оставьте свое сообщение