Как в скрипте извлечь БЗ строки
Здравствуйте.
Для расчёта надбавки необходимо использовать БЗ оклада.
БЗ оклада - кодируемое значение, поэтому, если использовать функцию poiskbz, получим уже "расшифрованное" значение оклада.
Проблема в том, что в БЗ оклада может быть указан процент. Например, коду 5 в сетке соответствует значение 10000. если в БЗ указано 5.5, то функция poiskbz возвращает значение 5000. Задача же состоит в том, чтобы получить полное значение оклада (10000), независимо от процента, указанного в дробной части кода. М.б. у функции poiskbz есть какой-то незадокументированный параметр, позволяющий не учитывать дробную часть?
Пробовал получать БЗ оклада так:
// Базовое значение оклада
char str[256];
var IDate = CreateObject("KDate"); IDate.SetDate(static_cast_to_string(data));
GetKchValue("p_k_g",str,2,KDateFromInt_LastDay(KDateFromStr(to_string(data)).GetAbs()*(-1.)));
int p_k_g=atoi(str);
int row = poisk_row(904,0,data,0);
AmbaMessageBox(row,"номер строки",0,0);
int bz = GetBase(row);
AmbaMessageBox(bz,"базовое значение",0,0);
double bzokl=0.;
Value_For_Table_Cod(p_k_g,razryad,data,bzokl);
Когда считаю в "ручном" режиме - по F4 - всё хорошо. Если посчитать в автоматическом, КЗ падает.
MessageBox-сы позволили установить, что в ручном режиме номер строки определяется правильно, а в автоматическом row = -1, соответственно bz = -непонятно что.
Что делаю не так?
Сервис поддержки клиентов работает на платформе UserEcho
Помогите, пожалста, кто-нибудь! Зарплата "горит"....
-1 возвращается если в лс нет строки с внутренним кодом 904
может быть это происходит на другом отмеченном ЛС в котором действительно нет вида? (либо приложите сохраненку с ЛС)
poisk_row работает с учетом совместительства, источника, объекта строки (могут влиять значения в 18-22 столбцах Спец.твх у рассчитываемого вида)
Понял... Это происходит в тех ЛС, в которых несколько совместительств, в ситуации, когда по какому-то совместительству надбавка есть, а оклада нет.
Тогда возникает другой вопрос - как получить БЗ оклада именно по тому совместительству, по которому рассчитывается надбавка?
Тут совсем другая ситуация.
Разве poisk_row не учитывает сов-во, по которому рассчитывается надбавка?
Андрей писал:
На мой взгляд скрипт практически один в один.
Можете выложить сохраненку, на которой он не взлетел?
А решение, предложенное тут не помогло?
З.ы. Зачем в вашем примере GetAbs() умножается на минус 1?
Кажется, что код может быть проще.
double bz=0.;
int row = poisk_row(904,0,data,0);
if ( row!=-1 )
{
int ibz = GetBase(row);
bz_kod (904,data,ibz,bz);
}
bz_kod автоматически учтет все возможные варианты задания БЗ через сетку, в том числе и через p_k_g