Программное создание новой орагнизации

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

Программное создание новой орагнизации

Сообщение Ренат »

Здравствуйте.
Пытаюсь перенести в базу Галки контрагентов из другой программы учета.
Т.е. из той программы выгрузил в 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;
Ошибок при выпонение этой команды не происходит.
Теперь при попытки открыть эту организацию в Галке выскакивает сообщение об ошбике "нарушение целостности каталога!"
Подскажите пожалуйста как правильно вставить нового контрагента!
Спасибо.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

дело в том что при вставке организации надо вставлять записи не в одну таблицу. мой совет, включите журнализацию.
создайте орагинзацию штатными средствами
просмотрите журнал

всё сразу станет понятно.
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

Сообщение Ренат »

Понятно.
А нет ли возможности использовать какую нибудь функцию для вставки нового контрагента? Которая бы и создала автоматом все прилагающиеся для организации.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

4 варианта.
1. вы сами создадите katorgdesgr ( определяет вхождение в группы).
2. напишите aqa скрипт по вставке организаций и потом сгенерите его на все организации.
3. выполните проверку каталога в модуле настройка
4. А чем не подходит модуль "обмен-бизнес документами"? Там правда требуется несколько таблиц, но можно указать и одну и туже.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение 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, а потом вызываешь эти объектники. Могу ошибаться, времени нет точнее смотреть..
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

Правда для теста нужны будут объявленческая часть (vih файлы)...
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

Сообщение Ренат »

А как узнать Nrec только что вставленной записи?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение 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);
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

Сообщение Ренат »

Спасиба. :grin: Сейчас буду проверять работу объектного интерфейса
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

Сообщение Ренат »

А что именно вызывать?
у меня в файл 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;
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

Ну там в примере вродь заполение katorgdescr а потом описатель иерахии вызвывается на заполнение

var LL: KatOrgFuncsObj;
GetVipRef(LL, 'KatOrgFuncs');
if not LL.InsertAllIerdescr(KatOrgDescr.NRec,KatOrgDescr.Name)
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

Сообщение Ренат »

У меня получилось так:

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

             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 файлов?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

В смысле реализация этих методов и функций ?
Ренат
Постоянный обитатель
Сообщения: 194
Зарегистрирован: 12 сен 2007, 16:34
Откуда: Глазов
Контактная информация:

Сообщение Ренат »

:-? даже не знаю что сказать :)
Я например планирую в дальнейшем в автоматическом режиме на основе одного документа "Заявка" формировать "ДО", "Накладную" и
"Ордера". Где можно прочитать про эти объектные интерфейсы чтобы знать что вызвать программно для формриования этих документов.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

Мда...

1. В техподдержку обратитесь ...
2. По поиску на форуме попробуйте поискать.Вроде что то было про это.
3. Ну или кто то из присутствующих поделится данной инфой хотя бы по кусочкам :grin:
Ответить