TXO для закрытия счета
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный обитатель
- Сообщения: 159
- Зарегистрирован: 28 сен 2005, 19:48
- Откуда: mos
- Контактная информация:
TXO для закрытия счета
Кто нибудь писал TXO для закрытия счетов? Если да, скиньте пожалуйсто примерчик.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
доку читайте . там все нормально написано.
маленького нет под рукой.
вот вам затравка
procedure StoreCycles(hTxo : longint; buf : TTxoApiInfoDoc);
var
bufcloSch: TTxoInfoCloSch ;
k :word ;
wsu,wsud :double ;
wkl_deb :word ;
{
set CurSoprDoc := buf.cSoprDoc;
set CurSoprHoz := buf.cSoprHoz;
set CurDatOb := buf.DatOb;
set CurTidk := buf.TidkGal;
set MyPlansNo:= buf.cplanssch ;
ParamParser(hTxo);
TxoAllowRecallStoreCycles(hTxo);
if getfirst planssch=0
{ wschk:=planssch.kod+'10'
wschd:=planssch.kod+wsch
}
else
{ message('')
exit ;
}
TxoGetInfoCloSch(htxo,bufcloSch)
set c_groupmc := bufcloSch.cKau_3 ;
set c_saldonm := bufcloSch.csaldonm
маленького нет под рукой.
вот вам затравка
procedure StoreCycles(hTxo : longint; buf : TTxoApiInfoDoc);
var
bufcloSch: TTxoInfoCloSch ;
k :word ;
wsu,wsud :double ;
wkl_deb :word ;
{
set CurSoprDoc := buf.cSoprDoc;
set CurSoprHoz := buf.cSoprHoz;
set CurDatOb := buf.DatOb;
set CurTidk := buf.TidkGal;
set MyPlansNo:= buf.cplanssch ;
ParamParser(hTxo);
TxoAllowRecallStoreCycles(hTxo);
if getfirst planssch=0
{ wschk:=planssch.kod+'10'
wschd:=planssch.kod+wsch
}
else
{ message('')
exit ;
}
TxoGetInfoCloSch(htxo,bufcloSch)
set c_groupmc := bufcloSch.cKau_3 ;
set c_saldonm := bufcloSch.csaldonm
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
1. Если без ТХОАПИ, то закрываемый счет должен быть в кредите всегда! Аналитику из сальдо брать по ключу KAU по дебету. Если направление проводки должно быть всегда обратное , то играйтесь со знаком суммы(для кредитового сальдо &SUm будет отрицательным).
2. Насчет аналитики все как обычно. Если проводки идут на счета с одинаковой аналитикой, то выбираете сначала первый из них явно, а потом уже ставите режимы аналитик(в том числе и на счет). Если с разной, то на каждую группу придется настраивать свою проводку и предусматривать отбор по каким то параметрам. Циклическую лучше поставить - так оно как то надежней.
Может LaaLaa скажет чего то новенького? вроде собирались переделать.
2. Насчет аналитики все как обычно. Если проводки идут на счета с одинаковой аналитикой, то выбираете сначала первый из них явно, а потом уже ставите режимы аналитик(в том числе и на счет). Если с разной, то на каждую группу придется настраивать свою проводку и предусматривать отбор по каким то параметрам. Циклическую лучше поставить - так оно как то надежней.
Может LaaLaa скажет чего то новенького? вроде собирались переделать.
Если для закрытия счета вам на каждую позицию сальдо нужно сделать только ону проводку. То это не циклический алгоритм. Тогда вам нужно в TXO API за закачки ссылок использовать функции TxoHeadAddSchet и TxoHeadAddKau. При этом и счет и аналитику нужно закачивать с одним режимом (например flKau_Mode0). Затем а нвстройке ТХО просто указать <режим 0> для счета и субсчета, для аналитики ничего не заполнять. Будет вам счастье. Алгоритм ТХО автоматом расставит аналитику в провоке по своим местам.
Если вам нужно сделать для каждой позиции сальдо более чем одну проводку. Типа распределить по некоторой пропорции. То это алгоритм циклический. Тогда для закачки ссылок нужно использовать функции TxoBodyAddSchet и TxoBodyAddKau. При этом в настройке ТХО уже нужно будет указывать и режим для счета, и режим для всех аналитик, и заполнять поля "Циклическая обработка по". Чтобы задать аналитику в этом случае - нужно окно настройки ТХО переключить в расширенный режим (см. локальное меню окна - [Alt+S]).
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Здравствуйте, уважаемые. Подскажите, пож., в чём причина неработоспособности объекта TTxoInfoCloSch: не читаются, например свойства cKau_1, сPodr?
procedure StoreCycles(hTxo : longint; buf : TTxoApiInfoDoc);
{ TxoAllowRecallStoreCycles(hTxo);
CurChozoper:= buf.cHozoper;
CurObor := buf.cObor;
var info: TTxoInfoCloSch;
TxoGetInfoCloSch(hTxo,info);
cKau1:=info.cKau_1; // Здесь выдаётся 0
cpodr:=info.cPodr; // Тоже 0
...
procedure StoreCycles(hTxo : longint; buf : TTxoApiInfoDoc);
{ TxoAllowRecallStoreCycles(hTxo);
CurChozoper:= buf.cHozoper;
CurObor := buf.cObor;
var info: TTxoInfoCloSch;
TxoGetInfoCloSch(hTxo,info);
cKau1:=info.cKau_1; // Здесь выдаётся 0
cpodr:=info.cPodr; // Тоже 0
...
Вот смотрите сами реализацию этой функции false будет
если pTxo неправильная ссылка
если TiDkGal <> 777 запустили не из закрытия счетов
если переданная запись буфера pBufCloSch не является переменной или на подходит по размеру
размер буфера TTxoInfoCloSch может не сойтись если типы составляющих его полей tSchet3 tSchet19 tSubSch tNoDok не верно определены
для 8.1 должно быть в dictypes.def должно быть
в старых версиях галактики эти типы были на пару символов меньше
более чем у верен что у вас устаревший файл dictypes.def
или наоборот устаревшая галактика а файл новый.
если pTxo неправильная ссылка
если TiDkGal <> 777 запустили не из закрытия счетов
если переданная запись буфера pBufCloSch не является переменной или на подходит по размеру
Код: Выделить всё
function TxoGetInfoCloSch(pTxo : PTXOProc_Minimum; pBufCloSch : PField) : boolean;
begin
result := false;
// сработает только из закрытия счетов
if not Assigned(pTxo) then exit;
if pTxo^.InfoDoc.Ob_TiDkGal <> 777 then exit;
// pBufCloSch должно быть Record TTxoInfoCloSch
if not Assigned(pBufCloSch) then exit;
if not pBufCloSch^.Verify then exit;
if pBufCloSch^.DataType <> ftRecord then exit;
pTxo^.BodyIns_ResFlags := pTxo^.BodyIns_ResFlags or rfCloSchInfo;
with PCloseSchTXOProc(pTxo)^ do begin
// размер и количество полей долно совпадать
if pBufCloSch^.PasDataSize <> sizeof(bufCloSch) then exit;
// про количество поправка : массив - это одно поле
pBufCloSch^.PasPut (@bufCloSch, sizeof(bufCloSch));
end;
result := true;
end;
для 8.1 должно быть в dictypes.def должно быть
Код: Выделить всё
tNoDok = String [20], // Номер документа
tSchet3 = String [21], // Счет
tSchet19 = String [20], // Счет
tSubSch = String [21], // Субсчет
более чем у верен что у вас устаревший файл dictypes.def
или наоборот устаревшая галактика а файл новый.