Страница 1 из 2

Вычитание дат

Добавлено: 21 мар 2007, 14:37
lingreen
Привед всем, у меня такой вот вопрос, мне надо отнять от одной даты другую хотела использовать ф-ию Sub_date, но из этого ничего не получилось, т к мне надо чтоб при вычитании даты 02.05.2007 от 01.02.2007 получилось01.03.00, а не то, что получается при использовании этой ф-ии, если у кого есть какие-нибудь идеи поделитесь пжст.

Добавлено: 21 мар 2007, 14:56
dp
мне надо отнять от одной даты другую
если нужно просто получить количество дней между датами - то переведи в дни, а затем вычти.

если нужно получить что-то более другое - то напиши что нужно получить на выходе

Добавлено: 21 мар 2007, 15:04
edward_K
есть функция которая сразу дни возвращает ( и могет еще и выходные выбросить)
function CalcDaysBetweenDates (aDateFrom,
aDateTo : date;
aMinusNonWorkDays : Boolean
) : integer;

Добавлено: 22 мар 2007, 11:33
Alexander
lingreen
честно говоря, не совсем понятно для чего вам такая дата нужна. Если для подсчета ко-ва дней-функция выше, если для чего-то другого-скажите лучше что вы хотите сделать.

Добавлено: 22 мар 2007, 11:57
edward_K
наверное для подсчета стажа 8)
если да то
1. у вас часом доки не завалялось как же его считать?
2. на это дело есть объектный фейс, тока см пункт 1 - у всех свое мнение.

Добавлено: 22 мар 2007, 14:11
lingreen
edward_K
доки не завалялось..........., и какой на енто дело есть фейс?

Добавлено: 22 мар 2007, 14:34
edward_K
runstaj.vih
=========
objinterface ObjRunStaj;

public function RunStrStaj(PsnNRec : comp; StajSysCode : integer; RunDate : date) : string;
// Возвращает стаж в виде строки 'Лет: Месяцев: Дней:

public function GetStajYears(PsnNRec : comp; StajSysCode : integer; RunDate : date) : word;
// Возвращает количество лет в стаже

public function GetStajMonths(PsnNRec : comp; StajSysCode : integer; RunDate : date) : word;
// Возвращает количество месяцев в стаже

public function GetStajDays(PsnNRec : comp; StajSysCode : integer; RunDate : date) : word;
// Возвращает количество дней в стаже

//Для работы иногда требуется привязка к Nrec записи о стаже...
//скажем для анализа пользовательских стажей
public function NRunStrStaj(PsnNRec : comp; StajNrec : comp; RunDate : date) : string;
// Возвращает стаж в виде строки 'Лет: Месяцев: Дней:

public function NGetStajYears(PsnNRec : comp; StajNrec : comp; RunDate : date) : word;
// Возвращает количество лет в стаже

public function NGetStajMonths(PsnNRec : comp; StajNrec : comp; RunDate : date) : word;
// Возвращает количество месяцев в стаже

public function NGetStajDays(PsnNRec : comp; StajNrec : comp; RunDate : date) : word;
// Возвращает количество дней в стаже

end;

objinterface ObjRunStaj1;

public function GetPercServN(PsnNRec : comp; LSchetKateg : comp; RunDate : date) : double;
// Возвращает процент для северного стажа

public function GetPercServNDate(PsnNRec : comp; LSchetKateg : comp; RunDate : date) : date;
// Возвращает реальную дату назначения процента для северного стажа

public function GetNDateForNorth(PsnNRec : comp; LSchetKateg : comp; Percent : double; RunDate : date) : date;
// Возвращает реальную дату назначения указанного процента для северного стажа

end;

vipinterface RunStaj implements ObjRunStaj, ObjRunStaj1
;

Добавлено: 08 фев 2008, 18:02
varvara
А как можно посчитать страховой стаж?То ли из-за того , что он появился позже, системный код у него 0 и предложенные методы не подходят.

Добавлено: 06 авг 2008, 15:04
solka
Помогите пожалуйста разобраться с функцией RunStrStaj.
Что такое StajSysCode?
Я описала объектный интерфейс и вызываю ф-ю с параметрами: RunStrStaj(Pers_nrec, epStaffSlCont, DateBeg);
Функция вызывается, но выдает совершенно неверные данные.

Добавлено: 06 авг 2008, 15:15
Den
это тип стажа
точнее сис код в Catalogs для типа стажа


( 61, 'Общий стаж');
( 62, 'Непрерывный стаж для листа нетрудоспособности');
( 63, 'Стаж по специальности');
( 64, 'Северный стаж');
( 65, 'Стаж для выслуги лет');
( 88, 'Стаж работы по последней профессии');
...

Добавлено: 02 сен 2008, 15:30
RAJAH
Здравствуйте!
Подскажите, что не так: у меня строка стажа (staj) пустая.

Код: Выделить всё

#include RunStaj.vih
interface CalcStaj
var
  icalcstaj: runstaj;
  staj: string;
  persnrec: comp;
  dstaj: date;

create view as select * from grnal;

parameters
  persnrec, staj, dstaj;

browse www
  fields
    grnal.nrec;
end;

handleevent
  cminit:
  {
     staj:=icalcstaj.NRunStrStaj(PersNRec, 1FCh, dstaj);
     closeinterface(0);
  }
end;

end.

Добавлено: 08 сен 2008, 11:01
RAJAH
Неужели никто с этим не сталкивался? RunStaj.vih я, естественно, взял новый (для 8.1), с #define и #component. Вызываю из отчёта фейс RunInterface(Calcstaj, ls, staj, endper), а он ругается, что "Возникло необработанное исключение ExObjIfcNoLoad (ExRef)
ошибка загрузки объекта из ресурсного файла(RunStaj)". Соответственно, переменная staj - пустая...

Добавлено: 08 сен 2008, 12:11
Max_Fin
как вариант, возможно, отличаются исходники, проверьте

Код: Выделить всё

#ifndef _RunStaj_vih_Included
#define _RunStaj_vih_Included

#ifdef ComponentVersion
#component "z_Staff"
#end

#doc
Расчет стажей
#end
objinterface ObjRunStaj;

#doc
Возвращает стаж в виде строки 'Лет: Месяцев: Дней:
#end
public function RunStrStaj(PsnNRec : comp; StajSysCode : integer; RunDate : date) : string;

#doc
Возвращает количество лет в стаже
#end
public function GetStajYears(PsnNRec : comp; StajSysCode : integer; RunDate : date) : word;

#doc
Возвращает количество месяцев в стаже
#end
public function GetStajMonths(PsnNRec : comp; StajSysCode : integer; RunDate : date) : word;

#doc
Возвращает количество дней в стаже
#end
public function GetStajDays(PsnNRec : comp; StajSysCode : integer; RunDate : date) : word;

//Для работы иногда требуется привязка к Nrec записи о стаже...
//скажем для анализа пользовательских стажей

#doc
Возвращает стаж в виде строки 'Лет: Месяцев: Дней:
#end
public function NRunStrStaj(PsnNRec : comp; StajNrec : comp; RunDate : date) : string;

#doc
Возвращает количество лет в стаже
#end
public function NGetStajYears(PsnNRec : comp; StajNrec : comp; RunDate : date) : word;

#doc
Возвращает количество месяцев в стаже
#end
public function NGetStajMonths(PsnNRec : comp; StajNrec : comp; RunDate : date) : word;

#doc
Возвращает количество дней в стаже
#end
public function NGetStajDays(PsnNRec : comp; StajNrec : comp; RunDate : date) : word;

#doc
Возвращает процент для северного стажа
#end
public function GetPercServN(PsnNRec : comp; LSchetKateg : comp; RunDate : date) : double;

#doc
Возвращает реальную дату назначения процента для северного стажа
#end
public function GetPercServNDate(PsnNRec : comp; LSchetKateg : comp; RunDate : date) : date;

#doc
Возвращает реальную дату назначения указанного процента для северного стажа
#end
public function GetNDateForNorth(PsnNRec : comp; LSchetKateg : comp; Percent : double; RunDate : date) : date;

#doc
Перерасчитывает стажи, получая реальные данные в 3-е окно, относительно записей в "истории" каждого стажа по текущему работнику
#end
public procedure ReCalcStaj(PsnNRec : comp; cPosition : comp);

end;

vipinterface RunStaj implements ObjRunStaj
#ifdef ATL51
Licensed (free)
#end
;
#endif

Добавлено: 08 сен 2008, 12:22
RAJAH
Нет, всё тоже, только у меня с шапкой, где написано что "Разработал Антонович А.К." :) Всё равно то же предупреждение выскакивает.

Добавлено: 08 сен 2008, 15:08
Den
Быстрее всего все же не определена/криво определена компонетная принадлежность...В сообщении об ошибке же идет далее "Ошибка загрузки объекта из ресурного файла(....)" В скобочках вся суть.. )

Вы попробуйте в заголовочном файле поправить сами спецом криво вместо #component "z_staff", например, "qwerty"? собрать такой вариант и запустить на выполенение. Если все правильно подключено, то получите в приведенной Вами ошибки мессаг типа
"Ошибка загрузки объекта из ресурного файла(qwerty::runstaj)"