0
На рассмотрении

Как в скрипте извлечь БЗ строки

Игорь Шалдин 5 лет назад в Расчеты начислений и удержаний / Алгоритмы обновлен Вячеслав Шинкарев (менеджер разработки) 5 лет назад 6

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

Для расчёта надбавки необходимо использовать БЗ оклада.

БЗ оклада - кодируемое значение, поэтому, если использовать функцию 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 = -непонятно что.

Что делаю не так?

Помогите, пожалста, кто-нибудь! Зарплата "горит"....

На рассмотрении

-1 возвращается если в лс нет строки с внутренним кодом 904
может быть это происходит на другом отмеченном ЛС в котором действительно нет вида? (либо приложите сохраненку с ЛС)

poisk_row работает с учетом совместительства, источника, объекта строки (могут влиять значения в 18-22 столбцах Спец.твх у рассчитываемого вида)

-1 возвращается если в лс нет строки с внутренним кодом 904
может быть это происходит на другом отмеченном ЛС в котором действительно нет вида?

Понял... Это происходит в тех ЛС, в которых несколько совместительств, в ситуации, когда по какому-то совместительству надбавка есть, а оклада нет. 

Тогда возникает другой вопрос - как получить БЗ оклада именно по тому совместительству, по которому рассчитывается надбавка? 

А решение, предложенное тут не помогло?

Тут совсем другая ситуация.

Тогда возникает другой вопрос - как получить БЗ оклада именно по тому совместительству, по которому рассчитывается надбавка?

Разве poisk_row не учитывает сов-во, по которому рассчитывается надбавка?

Андрей писал:

poisk_row работает с учетом совместительства, источника, объекта строки (могут влиять значения в 18-22 столбцах Спец.твх у рассчитываемого вида)

Тут совсем другая ситуация.

На мой взгляд скрипт практически один в один.

Можете выложить сохраненку, на которой он не взлетел?

А  решение, предложенное тут не помогло? 

З.ы. Зачем в вашем примере 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

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