Страница 1 из 2
Программное создание новой орагнизации
Добавлено: 04 дек 2007, 12:17
Ренат
Здравствуйте.
Пытаюсь перенести в базу Галки контрагентов из другой программы учета.
Т.е. из той программы выгрузил в dbf и должен написать vip интерфейс по загрузке. Попытался сделать просто одну команду вставки новой организации:
Код: Выделить всё
Insert Into katorg
set NAME:='Проверка вставки', //Наименование организации
CODE:='внут код', //Внутренний код
TIPORG:='ЮЛ', //Тип организации - ФЛ, ЮЛ,
ADDR:='домашний', //Адрес контраген
TEL:='сотовый', //Телефоны контрагента
cCity:=comp('0000000000000002h'),
CSTATE:=comp(0),
CGRAFIK:=comp(0),
CCALENDAR:=comp(0),
LastDate:=Cur_Date(),
LastUser:=username;
Ошибок при выпонение этой команды не происходит.
Теперь при попытки открыть эту организацию в Галке выскакивает сообщение об ошбике "нарушение целостности каталога!"
Подскажите пожалуйста как правильно вставить нового контрагента!
Спасибо.
Добавлено: 04 дек 2007, 12:26
Алексей
дело в том что при вставке организации надо вставлять записи не в одну таблицу. мой совет, включите журнализацию.
создайте орагинзацию штатными средствами
просмотрите журнал
всё сразу станет понятно.
Добавлено: 04 дек 2007, 12:29
Ренат
Понятно.
А нет ли возможности использовать какую нибудь функцию для вставки нового контрагента? Которая бы и создала автоматом все прилагающиеся для организации.
Добавлено: 04 дек 2007, 13:00
edward_K
4 варианта.
1. вы сами создадите katorgdesgr ( определяет вхождение в группы).
2. напишите aqa скрипт по вставке организаций и потом сгенерите его на все организации.
3. выполните проверку каталога в модуле настройка
4. А чем не подходит модуль "обмен-бизнес документами"? Там правда требуется несколько таблиц, но можно указать и одну и туже.
Добавлено: 04 дек 2007, 14:38
Den
Посмотрел краем глаза сожалению нет таких функций, видимо...если поможет :
Вот объектный интерфейс:
ObjInterface KatOrgFuncsObj;
function InsertAllIerDescr(cgr: comp; OrgName: string): boolean;
procedure CreateAllIerDescr;
function MakeDuplicate(cSource: comp; cDest: comp; var FirstOrg: comp): boolean;
procedure SetKatOrgDescrArch(crg: comp; Arch: word);
end;
VipInterface KatOrgFuncs implements KatOrgFuncsObj
А вот как юзают ее галактята :
/*--------------------------------------------------------------------*/
/* Создает KatOrgDescr и описатели иерархии для организации с NRec cr */
/* Коды возврата: */
/* 0 - Операция прошла успешно */
/* 1 - KatOrg с переданным NRec не найден */
/* 2 - Ошибка в ссылках на группы контрагентов для пользователя */
/* 3 - Ошибка при вставке новой записи в KatOrgDescr */
/* 4 - Ошибка при вставке нового описателя иерархии KontrIer */
/*--------------------------------------------------------------------*/
function CreateKatOrgDescr(cr:comp):integer;
var
ckodGroup, ckodNRec : comp;
TransResult:word;
{
chkSaveState;
if GetFirst KatOrg where ((cr == KatOrg.NRec)) <> tsOK
{ chkRestoreState;
CreateKatOrgDescr:=1;
exit;
}
TransResult:=BeginConcurrentTransaction(trNoLock);
ClearBuffer(#KatOrgDescr);
KatOrgDescr.Code:=1;
KatOrgDescr.cRec:=KatOrg.NRec;
KatOrgDescr.Name:=KatOrg.Name;
#ifndef GAL8_5
KatOrgDescr.LastUser:=KatOrg.LastUser;
KatOrgDescr.LastDate:=KatOrg.LastDate;
KatOrgDescr.LastTime:=KatOrg.LastTime;
#end
KatOrgDescr.isLeaf:=1;
#ifdef GAL5_80
KatOrgDescr.isArch := 2*KatOrg.isArch;
#end
#ifdef _CheckLinks_VIH_
if NullVipRef(oChkLink) GetVipRef(oChkLink, 'KatOrg');
if oChkLink.CheckLinks(coKatOrgDescr)
#else
if CheckLinks(coKatOrgDescr)
#end
KatOrgDescr.cGroup:=0
else
{ if GetFirst KatLink where (( UserName == KatLink.OwnName and
coKatOrgDescr == KatLink.CodeTable
)) <> tsOk
{ chkRestoreState;
CreateKatOrgDescr:=2;
AbortTransaction;
exit;
}
KatOrgDescr.cGroup:=KatLink.cRec;
}
if insert current KatOrgDescr <> tsOk
{ chkRestoreState;
CreateKatOrgDescr:=3;
AbortTransaction;
exit;
}
var LL: KatOrgFuncsObj;
GetVipRef(LL, 'KatOrgFuncs');
if not LL.InsertAllIerdescr(KatOrgDescr.NRec,KatOrgDescr.Name)
{ CreateKatOrgDescr:=4;
AbortTransaction;
exit;
}
chkRestoreState;
EndTransaction;
CreateKatOrgDescr:=0;
}
Может тебе это поможет...я так понял вставляешь сам katorg, а потом вызываешь эти объектники. Могу ошибаться, времени нет точнее смотреть..
Добавлено: 04 дек 2007, 14:42
Den
Правда для теста нужны будут объявленческая часть (vih файлы)...
Добавлено: 04 дек 2007, 16:27
Ренат
А как узнать Nrec только что вставленной записи?
Добавлено: 04 дек 2007, 16:29
Den
Insert Into katorg
set NAME:='Проверка вставки', //Наименование организации
CODE:='внут код', //Внутренний код
TIPORG:='ЮЛ', //Тип организации - ФЛ, ЮЛ,
ADDR:='домашний', //Адрес контраген
TEL:='сотовый', //Телефоны контрагента
cCity:=comp('0000000000000002h'),
CSTATE:=comp(0),
CGRAFIK:=comp(0),
CCALENDAR:=comp(0),
LastDate:=Cur_Date(),
LastUser:=username;
Message('katrog.name='+katrog.name+' katorg.nrec='+katorg.nrec);
Добавлено: 04 дек 2007, 16:36
Ренат
Спасиба.

Сейчас буду проверять работу объектного интерфейса
Добавлено: 04 дек 2007, 16:49
Ренат
А что именно вызывать?
у меня в файл
kofuncs.vih содержит
Код: Выделить всё
ObjInterface KatOrgFuncsObj;
function InsertAllIerDescr(cgr: comp; OrgName: string): boolean;
function MakeDuplicate(cSource: comp; cDest: comp; var FirstOrg: comp): boolean;
#ifdef GAL5_80
procedure SetKatOrgDescrArch(crg: comp; Arch: word);
#end
end;
VipInterface KatOrgFuncs implements KatOrgFuncsObj;
Добавлено: 04 дек 2007, 17:16
Den
Ну там в примере вродь заполение katorgdescr а потом описатель иерахии вызвывается на заполнение
var LL: KatOrgFuncsObj;
GetVipRef(LL, 'KatOrgFuncs');
if not LL.InsertAllIerdescr(KatOrgDescr.NRec,KatOrgDescr.Name)
Добавлено: 04 дек 2007, 17:17
Ренат
У меня получилось так:
Код: Выделить всё
Insert Into katorg
set NAME:='Проверка вставки', //Наименование организации
CODE:='внут код', //Внутренний код
TIPORG:='ЮЛ', //Тип организации - ФЛ, ЮЛ,
ADDR:='домашний', //Адрес контраген
TEL:='сотовый', //Телефоны контрагента
cCity:=comp('0000000000000002h'),
CSTATE:=comp(0),
CGRAFIK:=comp(0),
CCALENDAR:=comp(0),
LastDate:=Cur_Date(),
LastUser:=username;
Message('У вставленной записи Nrec='+string(KatOrg.Nrec));
Message('Сейчас будем создавать описание');
//
var LL: KatOrgFuncsObj;
GetVipRef(LL, 'KatOrgFuncs');
ClearBuffer(#KatOrgDescr);
KatOrgDescr.Code:=1;
KatOrgDescr.cRec:=KatOrg.NRec;
KatOrgDescr.Name:=KatOrg.Name;
KatOrgDescr.isLeaf:=1;
KatOrgDescr.cGroup:=0
insert current KatOrgDescr;
LL.InsertAllIerdescr(KatOrgDescr.NRec,KatOrgDescr.Name)
Message('Готово');
Вроде все нормально работает. А есть ли где нибудь описание этих
vih файлов?
Добавлено: 04 дек 2007, 17:24
Den
В смысле реализация этих методов и функций ?
Добавлено: 04 дек 2007, 17:44
Ренат

даже не знаю что сказать

Я например планирую в дальнейшем в автоматическом режиме на основе одного документа "Заявка" формировать "ДО", "Накладную" и
"Ордера". Где можно прочитать про эти объектные интерфейсы чтобы знать что вызвать программно для формриования этих документов.
Добавлено: 04 дек 2007, 17:48
Den
Мда...
1. В техподдержку обратитесь ...
2. По поиску на форуме попробуйте поискать.Вроде что то было про это.
3. Ну или кто то из присутствующих поделится данной инфой хотя бы по кусочкам
