Создание вида оплаты для совместительства
Почему-то не получается создать начисление для совместительства.
Для смены совместительства использую TmpCurCombine, создаю с помощью
otkrsnu. Начисление создаётся, но для основного места работы.
Ответ
Роман, приведите пожалуйста полный код скрипта, которым создаете вид для совместительства.
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(), которую выкладывал я в соседней теме - возвращает номер строки, а у вас возвращается какая то дата (либо вы неправильно используете результат)?
Остальное несущественное. Вашу функцию я слегка модифицировал - мне нужно было знать дату закрытия, чтобы открыть другой вид на следующий день, а проверкой типа в С++ я как-то не владею.При ответе Вячеслава всё наладилось.
Для открытия строки недостаточно одного совместительства. В общем случае для строки могут задаваться источники, объекты... 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
Для открытия строки недостаточно одного совместительства. В общем случае для строки могут задаваться источники, объекты... otrksnu смотрит на "свойство" установленное в CMN_SRC_C_WORK