0
Отвечен

Как массово переставить "галочки" на основную должность.

Анатолий Русин 6 лет назад в Интеграция с Контур-Персонал обновлен Гашков Николай (Эксперт) 6 лет назад 4

Добрый день!

В ходе работы с новым клиентом возникла следующая задача:

Image 865

В Контур-Персонале организация работал с 2008 года. Установили КЗ, настроили интеграцию.

В программу пришли должности за весь период работы организации.

Первая должность осталась основной.


Вопрос в следующем - как можно массово поставить галку "основная должность" на последнюю по дате ИД по 1500 сотрудникам? Чтобы не заходить в каждый ЛС?


Мы можем сделать что-то вроде такой вот таблицы разноски:

Image 866

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


Весь вопрос в том, каким образом вообще можно разнести данную информацию в ЛС?

Возможно, какой-то другой вариант существует?

Script
На рассмотрении
  • Вставляем код в SCRIPT\user\USFUNCRW.S
ProcessLs_ChangeOsnDolgn()
{
  bool bInsertls=true;//только по выделенным ЛС 
  bool skipArhiveLs=true; //пропустить архивные ЛС
  int countLs=(bInsertls)?cntnum:counttn;
  var CMsg=CreateObject("ProgressBar");
  CMsg.Initial(0,100,1);
  CMsg.SetShowTime(static_cast_to_int(false));
  for(int i=0;i<countLs;i++) //цикл по ЛС
  {
    if (CMsg.Msg_Proc(("Подождите немного. Идет обработка ЛС"),100.*i/countLs)==ESC ) {break;}
      
      int tnum=(bInsertls)?Porobr1(i)%sizetn:tn(i)%sizetn;
      if ( skipArhiveLs &&  IsArchLS(tnum))
          continue;
    int RC=LSRead(tnum, 0); //читаем ЛС
    var CL=CreateObject("CombineList");
    var tc=CreateObject("TmpCurCombine");     // Класс для временной смены а затем и восстановления текущего совместительства
    var it = CL.CreateIterator();
    int lastComb=0; //код должности с "максимальной" датой начала
    var lastDPriem=KDateFromStr("01.01.1900");
    for (it.SetBegin();!it.IsEnd();it.Next()) //цикл по должностям (it.CurKey() - внутр.код совместительства )
    {  
      int combine=it.CurKey();
      tc.Init(combine);//инициализируем нужным совместительством
      var dPriem=KDateFromStr(kch_from_safe("data_rb"));      
      if (dPriem.IsValid() && dPriem.GT(lastDPriem))
      {
        lastComb=combine;
        lastDPriem= KDateFromStr(dPriem.GetStr());
      }
    }
    if(lastComb && CL.GetBaseID()!=lastComb) //меняем галку
    {
      CL.SetBaseID(lastComb);
      //сохраняем ЛС
      char ls[256];
      long num;
      polnyi_tn(num);
      lsname(num,ls);
      lswrite(ls,0);
    }  
  }
}


  • Выделяем нужные ЛС
  • Shift+F4->выполнить код -> открыть
  • Выставляем строку
return ProcessLs_ChangeOsnDolgn();
  • Жмем молнию

USFUNCRW.zip

+1

вместо var dPriem=KDateFrom(to_string(kch_tipS("data_r")));

должно быть наверно так

char str[25];

kch_from("data_rb",str);

var dPriem=KDateFromStr(str);

Спасибо, исправил, перевыложил

Сервис поддержки клиентов работает на платформе UserEcho