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

Склонение ФИО

Добавлено: 15 июн 2006, 16:18
svetanch
Всем здравствуйте!

Возникла проблемка в модуле кадры.

В картотеке сотрудников можно указать склонение ФИО. Причем система сама делает первоначальное склонение по падежам, но можно задать и исключение. Исключения хранятся в таблице aboutfio, это мы нашли.
Непонятно, где хранятся сгенерированные системой склонения (которые мы не изменяли).

В отчете нам надо вытащить родительный падеж ФИО.

Кто нибудь подскажет, как можно это сделать?

Добавлено: 16 июн 2006, 11:36
edward_K
odecl.vih
==========
#ifdef ComponentVersion
#component "z_Staff"
#end

objinterface odeclension;

//Склонение фамилии или ее части
//NCase- падеж /2- 6/
//NPart- часть фамилии 1- первая или фамилия целиком; 2- вторая часть
//gender- 0- род определен программой 1- женский 2- мужской
function SurNameDeclension(LName: string; gender: word; NCase: word; NPart: byte): string;

//Склонение имени
function NameDeclension(FName: string; gender: word; NCase: word): string;

//Склонение отчества
function PatronDeclension(PName: string; gender: word; NCase: word): string;

//Склонение ФИО целиком
function FIODeclension(cpersons: comp; Infinitive: string; NCase: word): string;

//Добавление записи в словарь исключений
//0 -удачное добавление
//1- есть дубликат
//2- произошли ошибки на этапе вставки
function AddSimpleException(Target: string; ExceptType: byte): word;

//Окно ввода параметров исключения
procedure RunSimpleExceptionWindow;

//Поиск исключения по персоне
function fndpersonsException(cpersons: comp; nCase: word): string;

//Добавление записи в словарь персональных исключений
//0 -удачное добавление
//1- есть дубликат
//2- произошли ошибки на этапе вставки
function AddPersonalException(cpersons: comp; Target: string; nCase: word): word;

//Удаление записи из словаря персональных исключений
//0 -удачное удаление
//1- нет такой записи
//2- произошли ошибки на этапе удаления
function DeletePersonalException(cpersons: comp; nCase: word): word;

//Корректировка записи в словаре персональных исключений
//0 -удачная корректировка
//1- нет такой записи
//2- произошли ошибки на этапе корректировки
function UpdatePersonalException(cpersons: comp; Target: string; nCase: word): word;
end;

objinterface odeclension1;

function VerifyGender(target: string): word;

end;

vipinterface declension implements odeclension, odeclension1


#ifdef ATL51
Licensed (free)
#end

Добавлено: 16 июн 2006, 11:39
edward_K
пример
var iOdecl : declension; // Переменная типа интерфейс declension

iOdecl.FIODeclension(Persons.NRec, Persons.FIO, 3)

Добавлено: 16 июн 2006, 11:42
svetanch
Спасибо большое, edward_K! :smile: Буду копаться.

Добавлено: 16 июн 2006, 13:40
svetanch
edward_K, БОЛЬШОЕ-БОЛЬШОЕ СПАСИБО!!!
ВСЁ получилось!!!!!!!!!! :grin:

Добавлено: 20 июн 2006, 10:49
varvara
А в какой версии это работает? У меня (VIP – 3.03.22) при обращении к функции
iOdecl.FIODeclension(Persons.NRec, Persons.FIO, 3)
message(iOdecl)
выдается сообщение «Значение не определено».

Добавлено: 20 июн 2006, 11:00
edward_K
а слабо доку почитать что такое объектный фейс ? или вспомнить вообще что такое объекты, типы данных и т.п.
iOdecl - это объект со своими функциями, а в message нужно переменную загонять c типом string . Так не пробовали
message(Persons.fio+'/'+iOdecl.FIODeclension(Persons.NRec, Persons.FIO, 3) )?

Добавлено: 20 июн 2006, 19:46
varvara
Спасибо, все получилось.Можно еще использовать промежуточную переменную типа string
Str_:=iOdecl.FIODeclension(Persons.NRec, Persons.FIO, 3)
message(str_)
Дока это, конечно, хорошо, но с вашей помощью гораздо быстрее .Спасибо!

Добавлено: 14 фев 2007, 11:40
Vlad
Здравствуйте, подскажите, что я не так делаю?
1) в файле проекта прописываю

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

#include odecl.vih 
#make "bankCardsxls.frm"
2) в фрмке

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

.var
  coFio:comp;
  iOdecl1:odeclension;
  sfio,sfio1:string;
.endvar
....
.begin
sFio1:=iOdecl1.FIODeclension(coFio,sfio,3);
end.
3) компилирую (все отлично)
4) при запуске отчета ошибка "Возникло необработанное исключение
ExObjIfcBadVar(ExVip) поле не является ссылкой требуемого класса"

P.S. Галактика 7.12, файл Olecl.vih создал сам, скопировав со второго поста (см. выше).

Добавлено: 20 фев 2007, 01:18
Screw
Инициализируй переменную iOdecl1 (например, при помощи вызова GetVipRef(iOdecl1, 'Declension');). Либо вместо ссылки на obj-интерфейс oDeclension используй ссылку на vip-интерфейс Declension.

Добавлено: 20 фев 2007, 08:37
Vlad
Большое спасибо, очень выручили.