Ваши комментарии

Добрый день.

Никто не мешает поправить алгоритм под свои нужны..

Берем норму из графика, действующего на дату начала вида:

USALG.S

Как оперативно.. вопрос видимо не срочный?

Если есть доступ по удаленке можем посмотреть как починить...

если bFactHours==0, то получим нормативные часы( из графика), иначе часы из табеля

Думаю да.

Легко же проверить.. скрипт правильные результаты выдает?

Добрый день.

Вместо norm() , возвращающую норму за месяц, надо использовать skoljko() для каждого дня (за нужный период)

что типа вот этого:

CountTabelNormCalendDayPeriod(d1,d2,_SimvTabel, _SimvNorm, bHoliday,bFactHours, &Hours)
{
var dateBeg=KDateFromD(GetDateFromFuncRWScript(d1));
var dateEnd=KDateFromD(GetDateFromFuncRWScript(d2));
int TmpMrasch = mrasch;

int CountDay = 0;
double CountHours = 0.;

char SimvTabel[512], SimvNorm[512];
zamena_oboz(_SimvTabel,SimvTabel);
zamena_oboz(_SimvNorm, SimvNorm);

for ( int m=dateBeg.GetAbs(); m<=dateEnd.GetAbs(); m++ )
{
string Holidays = ListHolidays(m);
var razb = CreateObject("ParamFuncRW");
razb.IInitial(Holidays,",",32);
short HolidayDay[32];
for ( int i=0; i < razb.Count(); ++i )
HolidayDay[i]=atoi(razb.Get(i));

s50(m);
int firstDay=m==dateBeg.GetAbs()?dateBeg.GetDay():1;
int lastDay =m==dateEnd.GetAbs()?dateEnd.GetDay():countday;
for ( int day=firstDay; day <= lastDay; day++ )
{
int pos = poisk1(day,HolidayDay,razb.Count(),0);
if ( (bHoliday && pos!=EOF || !bHoliday && pos==EOF) &&
CountChar(SimvTabel,calm[day-1]) && CountChar(SimvNorm,calmras[day-1])
)
{
CountDay++;
double rv;
if(bFactHours)
skoljko(rv,data,day,day,SimvTabel,calm,1);
else
skoljko(rv,data,day,day,SimvNorm,calmras,0);
CountHours += rv;
}
}
}

Hours = CountHours;
if(mrasch!=TmpMrasch)
s50(TmpMrasch);
return CountDay;
}

Использовать так:

double Hours=0;
rwnorma(numcalend,0);
CountTabelNormCalendDayPeriod("20.01.2019","18.02.2019","Р","2", 0,0, Hours);
return Hours;

Добрый день.

На машине, где падает - офис активирован?

Еще очень похоже на проблему:

Проблема в том, что в реестре остались следы неудачных установок других версий MS Office.
Решение описано тут: https://stackoverflow.com/questions/12957595/error-accessing-com-components
  1. Ищем HKEY_CLASSES_ROOT\Interface\{000208D5-0000-0000-C000-000000000046}\TypeLib

    на 64разрядной windows надо искать раздел HKEY_CLASSES_ROOT\Wow6432Node\Interface\{000208D5-0000-0000-C000-000000000046}\TypeLib

  2. Запоминаем guid и версию из раздела (у меня {00020813-0000-0000-C000-000000000046}, версия 1.7)
  3. Ищем этот guid в HKEY_CLASSES_ROOT\TypeLib
  4. Делаем на всякий случай копию раздела с этим guid (HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046})
  5. Удаляем подразделы других версий с пустым содержимым (у клиента была также версия 1.7 и пустой подраздел 1.8, удаление 1.8 исправило ошибку)
  6. Перезагружаться не надо

Неправильно определялся столбец ТВХ, если столбец был из специальной ТВХ или ТВХ для сводов.

В п.ф. добавил мини инструкцию

Патч перевыложил

В предыдущем патче была ошибка:

ССЧ могла посчитаться нулевой в том случае, когда в списке источников указан главным источник, которого в ЛС нет

_patch_v3.zip

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