Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 21:07

Работа со справочником

Автор Wert12, 13 ноя 2012, 12:11

0 Пользователей и 1 гость просматривают эту тему.

Wert12

Здравствуйте!

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

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

Herby

Цитата: Wert12 от 13 ноя 2012, 12:11
Здравствуйте!

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

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

За вас сделать или подсказать как обработку написать?

Wert12

Подсказать как обработку сделать

Herby

Цитата: Wert12 от 14 ноя 2012, 11:03
Подсказать как обработку сделать

Сформировать список сотрудников со статусом "уволен":
Посмотрите как определяется этот статус в функции СостояниеЛица() и произведите отбор сотрудника по этим условиям. Ну а далее, у всех сотрудников со статусом уволен меняете родителя на нужный.

PS: Начните писать код, и выкладывайте его в этой теме. Если что-то будет не так - подскажу где поправить.

Wert12

//   Возвращаемое значение:
//      Строковое значение, состояние сотрудника (физлица) на рабочую дату
//
//   Описание:
//      Обрабатывает реквизит СостояниеФизлица и возвращает соответствующее значение
//
Функция СостояниеСотрудника()
   Перем ОписаниеСостояния;

   Если (ПустоеЗначение(ТекущийЭлемент())=1)или(ЭтоГруппа()=1) Тогда
      Возврат ""
   КонецЕсли;
   ДатаПриема = Дата(0);
   ДатаУвольнения = Дата(0);
   ДатаАктуальности = ИспользоватьДату();
   Периодический.ИспользоватьОбъект("СостояниеФизлица",ТекущийЭлемент());
   СостояниеФЗ = Периодический.ЗначениеНаДату(ДатаАктуальности);
   Если ПустоеЗначение(СостояниеФЗ)=0 Тогда
      Если Периодический.НайтиЗначение(ДатаАктуальности,-1)=1 Тогда
         ДатаПриема = Периодический.ДатаЗнач
      КонецЕсли;
      Если Периодический.НайтиЗначение(ДатаАктуальности+1,1)=1 Тогда
         ДатаУвольнения = Периодический.ДатаЗнач-1
      КонецЕсли;
      Если ТекущийЭлемент().ОсновнойЭлемент<>ТекущийЭлемент() Тогда
         ОписаниеСостояния = "Внутреннее совместительство";
         Если СостояниеФЗ=Перечисление.СостояниеФизлица.ВременноНеРаботает Тогда
            ОписаниеСостояния = "Внутреннее совмест-во, временно не работает";
         КонецЕсли;
      ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.СотрудникОсновной Тогда
         ОписаниеСостояния = "Штатный сотрудник";
      ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.СотрудникНеосновной Тогда
         ОписаниеСостояния = "Внешний совместитель";
      ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.Госслужащий Тогда
         ОписаниеСостояния = "Государственный служащий";
      ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.ВременноНеРаботает Тогда
         ОписаниеСостояния = "Временно не работает";
      Иначе
         ОписаниеСостояния = "Военнослужащий";
      КонецЕсли;
      Возврат ОписаниеСостояния+" с "+ДатаПриема+?(ПустоеЗначение(ДатаУвольнения)=1,""," по "+ДатаУвольнения)
   Иначе
      Периодический.ОбратныйПорядок();
      Периодический.ВыбратьЗначения(,ДатаАктуальности);
      Пока Периодический.ПолучитьЗначение()=1 Цикл
         Если ПустоеЗначение(Периодический.Значение)=1 Тогда
            Возврат "Сотрудник уволен "+(Периодический.ДатаЗнач-1)
         КонецЕсли;
      КонецЦикла;
   КонецЕсли;
   Если ОсновнойЭлемент=ТекущийЭлемент() Тогда
      Если глВидРасчетаДействует(ОсновнойЭлемент,,ДатаАктуальности,ДатаАктуальности)=1 Тогда
         Возврат "Физическое лицо, получающее доход на предприятии (договорник)";
      Иначе
         Возврат "Физическое лицо"
      КонецЕсли;
   Иначе
      Возврат "Не принят на внутреннее совместительство"
   КонецЕсли;

КонецФункции   // СостояниеСотрудника


//моя процедура



Процедура Перенос()

Спр = СоздатьОбъект("Справочник.Сотрудники");
  Дат = РабочаяДата();
    Спр.ВыбратьЭлементы();
   
   Пока Спр.ПолучитьЭлемент()=1 Цикл 
      
              

   Спр.ИспользоватьРодителя(Спр);
     со = Спр.СостояниеФизлица.Получить(Дат);
   
      не знаю как использовать функцию СостояниеСотрудника()   
    
    
    
     //Если (СокрЛП(со) = "Уволен") тогда
      
          
                  
         
     //           КонецЕсли;
                                 
                
            
   
   КонецЦикла

КонецПроцедуры   

Herby

Цитата: Wert12 от 16 ноя 2012, 09:19не знаю как использовать функцию СостояниеСотрудника()   

функция СостояниеСотрудника() в принципе не очень легка для понимания. Почему в перечисление "СостояниеФизлица" не добавить значение "Уволен" и уже от него отталкиваться? Можно даже просто отдельный признак(реквизит) "Уволен" прикрутить. А то получается очень наворочено с определением состояния "Уволен".

В общем если функция СостояниеСотрудника() написана правильно и она правильно работает, то вы определяете значение которое возвратила вам эта функция и в этом значении пытаетесь найти текст "Уволен". Если текст найден, значит переносите, иначе ничего не делаете

    Состояние = нРег(СостояниеСотрудника());
    Если Найти(Состояние, "уволен") > 0 Тогда
        // уволен, переносим
    Иначе
        // не уволен, не переносим
    КонецЕсли;


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск