0
Отвечен

Создание вида оплаты для совместительства

Роман Шивалов 2 года назад в Прочее обновлен 2 года назад 6

Почему-то не получается создать  начисление для совместительства.

Для смены совместительства использую TmpCurCombine, создаю с помощью
otkrsnu. Начисление создаётся, но для основного места работы.

Script

Ответ

+1
Ответ
Отвечен

Для открытия строки недостаточно одного совместительства. В общем случае для строки могут задаваться источники, объекты... otrksnu смотрит на "свойство" установленное в CMN_SRC_C_WORK

//AmbaMessageBox("982 = " + last_day_982.GetStr(),"",MB_OK|MB_ICONINFORMATION,0); 
//AmbaMessageBox("988 = " + last_day_988.GetStr(),"",MB_OK|MB_ICONINFORMATION,0);
      var Prop = CreateObject("APropBE");
      Prop.SetCombine(comb);
      var ts1 = CreateObject("TempCommonSrc");
      ts1.TempCommonSrcInitial(CMN_SRC_C_WORK);
      SetCommonProp(CMN_SRC_C_WORK,Prop);
      var ts2 = CreateObject("TempCommonSrc");
      ts1.TempCommonSrcInitial(CMN_SRC_MAIN); 
      SetCommonProp(CMN_SRC_MAIN,Prop);
var tc=CreateObject("TmpCurCombine"); // Класс для временной смены, а затем и восстановления текущей должности 
tc.Init(comb);//инициализируем 
ХОРОШО, МНЕ ПОНРАВИЛОСЬ
Оценка удовлетворенности от Роман Шивалов 2 года назад
На рассмотрении

Роман, приведите пожалуйста полный код скрипта, которым создаете вид для совместительства.

AfterWriteLS(Tn) {

var CL=CreateObject("CombineList");
var it = CL.CreateIterator();
for (it.SetBegin();!it.IsEnd();it.Next()) { //цикл по должностям (it.CurKey() - внутр.код совместительства )

long comb = it.CurKey();

if (!IsTimeLS(Tn,comb))
continue;

var d=KDateFromInt_WithDay(1,mrasch);

var last_day_982 = TryFindCodeValidOnDate(comb,982,d);
var last_day_988 = TryFindCodeValidOnDate(comb,988,d);
var open_date = CreateObject("KDate");
open_date.SetDate("01.01.2099");

// проверяем на последний закрытый вид оплаты
bool Otkr982 = false; // true - нужно открыть 982, false - не нужно открывать
bool Otkr988 = false; // true - нужно открыть 988, false - не нужно открывать

if (last_day_982.IsValid()) {
if (last_day_988.IsValid()) {
if (last_day_982.IsEq(open_date) || last_day_988.IsEq(open_date)) { // открыт любой вид
// не нужно ничего открывать
} else { // оба вида закрыты, вычисляем последний закрытый вид
if (last_day_982.LT(last_day_988)) { // если 988 закрыт позже, чем 982
Otkr982 = true;
} else
Otkr988 = true;
}
} else { // 988 не существует
if (!last_day_982.IsEq(open_date)) // 982 закрыт
Otkr988 = true;
}

} else { // 982 не существует
if (last_day_988.IsValid()) {
if (!last_day_988.IsEq(open_date)) // 988 закрыт
Otkr982 = true;
} else {
Otkr982 = true; // если ни один вид не существует, то открываем 982
}
}

//AmbaMessageBox("982 = " + last_day_982.GetStr(),"",MB_OK|MB_ICONINFORMATION,0);
//AmbaMessageBox("988 = " + last_day_988.GetStr(),"",MB_OK|MB_ICONINFORMATION,0);

var tc=CreateObject("TmpCurCombine"); // Класс для временной смены, а затем и восстановления текущей должности
tc.Init(comb);//инициализируем

//AmbaMessageBox("текущее совместительство " + to_string(IntCombineToExt(GetCurCombine())),"",MB_OK|MB_ICONERROR,0);

// соответственно открываем вид оплаты
if (Otkr982 == true) {

var dat = CreateObject("KDate");

if (last_day_988.IsValid()) {
last_day_988.Inc();
dat.SetDateD(last_day_988.GetDouble());
} else
dat = KDateFromInt_WithDay(1,mrasch);

char date[11];
date = dat.GetStr();

if (Panel_Zapros("Дата открытия 982 вида (" + to_string(IntCombineToExt(comb)) + ")"
, "", "Укажите дату открытия (" + to_string(IntCombineToExt(comb)) + ")", date, 10) != ESC) {
var temp = CreateObject("KDate");
temp.SetDate(to_string(date));
if (temp.IsValid()) {
dat.SetDateD(temp.GetDouble());
}
}

if ( otkrsnu(201, dat.GetDouble() , 205001.01, 0.00, "70", 0) == EOF )
AmbaMessageBox("Не получилось открыть вид 982","",MB_OK|MB_ICONERROR,0);
else {
long FullTn = Find_Full_TN(Tn);
if ( FullTn != EOF ) {
char ls[LSSTR];
lsname(FullTn,ls);
lswrite(ls,0);
}
}

} else if (Otkr988) {

var dat = CreateObject("KDate");

if (last_day_982.IsValid()) {
last_day_982.Inc();
dat.SetDateD(last_day_982.GetDouble());
} else
dat = KDateFromInt_WithDay(1,mrasch);

char date[11];
date = dat.GetStr();

if (Panel_Zapros("Дата открытия 988 вида (" + to_string(IntCombineToExt(comb)) + ")"
, "", "Укажите дату открытия (" + to_string(IntCombineToExt(comb)) + ")", date, 10) != ESC) {
var temp = CreateObject("KDate");
temp.SetDate(to_string(date));
if (temp.IsValid()) {
dat.SetDateD(temp.GetDouble());
}
}

if ( otkrsnu(222, dat.GetDouble() , 205001.01, 0.00, "70", 0) == EOF )
AmbaMessageBox("Не получилось открыть вид 988" ,"",MB_OK|MB_ICONERROR,0);
else {
long FullTn = Find_Full_TN(Tn);
if ( FullTn != EOF ) {
char ls[LSSTR];
lsname(FullTn,ls);
lswrite(ls,0);
}
}
}
tc = 0;
}
}

Не хватает ваших ф-ций TryFindCodeValidOnDate(),IsTimeLS() и возможно что то еще..

TryFindCodeValidOnDate(), которую выкладывал я в соседней теме - возвращает номер строки, а у вас возвращается какая то дата (либо вы неправильно используете результат)?

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

+1
Ответ
Отвечен

Для открытия строки недостаточно одного совместительства. В общем случае для строки могут задаваться источники, объекты... otrksnu смотрит на "свойство" установленное в CMN_SRC_C_WORK

//AmbaMessageBox("982 = " + last_day_982.GetStr(),"",MB_OK|MB_ICONINFORMATION,0); 
//AmbaMessageBox("988 = " + last_day_988.GetStr(),"",MB_OK|MB_ICONINFORMATION,0);
      var Prop = CreateObject("APropBE");
      Prop.SetCombine(comb);
      var ts1 = CreateObject("TempCommonSrc");
      ts1.TempCommonSrcInitial(CMN_SRC_C_WORK);
      SetCommonProp(CMN_SRC_C_WORK,Prop);
      var ts2 = CreateObject("TempCommonSrc");
      ts1.TempCommonSrcInitial(CMN_SRC_MAIN); 
      SetCommonProp(CMN_SRC_MAIN,Prop);
var tc=CreateObject("TmpCurCombine"); // Класс для временной смены, а затем и восстановления текущей должности 
tc.Init(comb);//инициализируем 

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