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

Как устроено ТХО?

Добавлено: 30 авг 2007, 15:07
PViP
Народ помогайте разобраться! Срочно нужно понять как это ТХО устроено.

Вопрос1: почему подразделят процедуры и функции на циклические и не циклические?
К примеру:

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

 procedure TxoHeadClear (hTxo : longint);
и

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

 procedure TxoBodyClear (hTxo : longint);
Получается что есть два буфера, для циклической обработки и для нециклической?

Вопрос2: Раз 2 разных буфера, то почему функции заполнения сумм только циклические?

ВОпрос3: Делаю циклическое тхо API, по какому принципу разноска происходит? К примеру есть кау1: word((23), ы циклической обработке я устанавливаю тоже кау word(23). В своем интерфейсе в цикле делаю следующее

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

TxoBodyClear(hTxo);
for (i := 0; i < 5; inc(i)){
  Txobodyaddkau(htxo, wflkau_auto, 23 , comp('000100000000C751h')+i); 
  Txobodysetsum(htxo, 45678, 0, 0);
  TxoBodyInsert(hTxo);
}
Получается у меня должно создаться 5 проводок, потому что в буфере будет 5 разных значений kau.

Вопрос4: Есть ли сервер ТХО?

Добавлено: 30 авг 2007, 16:05
Den
А Вы доку по ТХО API не пробовали читать...там вроде все довольно подробно расписано

Добавлено: 30 авг 2007, 17:47
Seybukan
НЕ циклическую не надо записывать, на то она и не циклическая.
Если вы определите пять режимов (режим-0) для подров, то ф буфер попадет только последнее.

А по циклической надо делать инсерт. Хотя в рамках одного инсерта сохраняется предыдущее правило.

Ну а сервер есть конечно - как же без него.

Добавлено: 31 авг 2007, 07:53
PViP
Den, Вы очень любознательны, Я читал доку! От куда бы я по вашему такие вопросы задавал!? Ответ вроде вашего, не несет смысловой нагрузки, а хотелось бы умных людей послушать и поучиться! Или есть дока которая описывает устройство ТХО?

Seybukan, по поводу сумм, сумма проводки заносится в обеих случаях(цикл и не цикл) одной функцией? Но при учете что функция перекачки сумм циклическая и пишет она в буфер "циклический", то как без инсерта это все будет работать, если по инсерту передаются данные серверу ТХО!?

Добавлено: 31 авг 2007, 08:59
Nikos
Я это так представляю:
1. Буфера 2
2. По аналогии тех же накладных: шапка и строки спецификации. В Head достаточно один раз записать и для всех записей будет одно и то же значение
3. В результате получится не 5 проводок, а 5 записей в буфере. А чтоб получилось 5 проводок нужно делать циклическую обработку данной аналитики

Добавлено: 31 авг 2007, 09:57
PViP
Nikos, по поводу 3 пункта - понимаю! По поводу 1 догадываюсь! А вот по поводу 2 совсем запутался, как мне сумму установить в не циклической обработке!?

Добавлено: 31 авг 2007, 10:23
Nikos
А разве если сумму через TxoBodySetSum добавить, то не будет работать?

Добавлено: 31 авг 2007, 10:32
Nikos
Так нормально работает:
procedure StoreCycles(hTxo : longint; buf : TTxoApiInfoDoc);
{
TxoHeadAddSchet(hTxo, wFlKau_Mode8, '710', '01');
TxoBodySetSum(hTxo,100,0,0);
TxoBodyInsert(hTxo);
}

В настройке ТХО просто вызываю &Vip[Obj:"TEST"] без всяких циклов, и счет и сумму ставит правильно

Добавлено: 31 авг 2007, 11:54
Seybukan
Как работает сервер ТХО прекрасно понимаю, а объяснить не могу....
Только на пальцах получиться.

Я вообще не понимаю как можно объяснить то - во что просто допереть надо.

Добавлено: 31 авг 2007, 11:55
Seybukan
Это надо юзать, один раз второй раз.
Просто прочитав доку ни фига не поймешь.
Вот когда попробуешь, только тогда поймешь глубинный смымсл всей этой ерунды.

Добавлено: 03 сен 2007, 07:46
PViP
Seybukan, млин, полностью с тобой согласен! :grin: Метод научного тыка - основной инструмент в познании "Галиктики"!

Nikos, так как ты написал работает - это я знаю, вопрос в логике, если нециклическая обработка идет, то зачем нам делать TxoBodyInsert(hTxo)? Я понимаю что сервер сам зделает агрегацию сумм, если мы несколько раз сделаем TxoBodyInsert(hTxo), но чушь получается! Моно прописать #define-ом свою функцию TxoHeadSetSum(hTxo,0,0,0), который будет подставлять код TxoBodySetSum(hTxo,0,0,0);TxoBodyInsert(hTxo); .

Добавлено: 03 сен 2007, 12:53
PViP
Уважаемые, еще один вопрос, теперь говорим о версии 8.10.
В доке пишут что деректива

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

#Component "Component_Name"
просто необходимо чтоб данные брались, но на практике оказывается что это не так. Отсутствие директивы не запрещает доступ к данным, а при ее упоминании к примеру в видах

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

#Component "L_SoprDoc"
или

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

#Component "F_TxoApi"
или

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

#Component "L_PlPor"
компилятор выдает
SecondOrg.vip(20) Предупреждение: Компонент L_SOPRDOC не имеет ни одной таблицы в словаре, возможно ошибочно задано имя компонента (стр.20, поз.1 в SecondOrg.vip)
Interface Txo_TxoSecondOrg;


Смысл этой директивы в API?

Добавлено: 03 сен 2007, 14:05
Seybukan
TxoBodyInsert(hTxo) вставляет запись в буфер сервера ТХО.

Но назначить какой либо аналитики одного режима можешь сколько угодно раз в коде, но возьмется все равно последний....
А если буфер не чистить в цикле, то значения Txobodyaddkau, TxobodySetSum сохранятся предыдущие.

Да и вообще вы спрашиваете зачем надо делать TxoBodyInsert(hTxo).
Тогда я спрашу а зечем нам надо делать Insert в таблицу?

Разве непонятно что нецеклически может быть реализована только аналитика или счет субсчет, но в таком случае лучше использовать
ObjTxoMenuPlugin
ObjTxoExtractKauPlugin
Они как раз и позволяют сделать свой режим нециклической аналитики. В таком случае вы просто используете его в настройке ТХО, а сумму берете любую, любым стандартным идентификатором ТХО.

Сумма в данном функционале (ТХО API как таковом) всегда циклическая!
Только нециклически настроенный идентификатор вернет сумму итоговую по циклическому буферу.
Надобности суммы в нециклическом буфере просто НЕТ.

Добавлено: 03 сен 2007, 15:05
PViP
Seybukan, спасибо.

Хотелось бы узнать о директиве #Component, так уж ли она необходима?

Добавлено: 04 сен 2007, 09:36
zna
Народ, помогите разобраться с Txo api в 810. Пытаюсь компилить код, который нормально проходил в 712, а здесь спотыкается на вызове первой же процедуры в StoreCycles, в данном случае это TxoDebugMsg:
...
procedure StoreCycles(hTxo : longint; buf : TTxoApiInfoDoc);
{
...
TxoDebugMsg(hTxo, 'cod_sr aa', string(CurSoprDoc));// Здесь выдаётся ошибка
TxoBodyClear(hTxo);
...
}
...
Что ей надо?