Страница 1 из 2
Как устроено ТХО?
Добавлено: 30 авг 2007, 15:07
PViP
Народ помогайте разобраться! Срочно нужно понять как это ТХО устроено.
Вопрос1: почему подразделят процедуры и функции на циклические и не циклические?
К примеру:
и
Получается что есть два буфера, для циклической обработки и для нециклической?
Вопрос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, млин, полностью с тобой согласен!

Метод научного тыка - основной инструмент в познании "Галиктики"!
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.
В доке пишут что деректива
просто необходимо чтоб данные брались, но на практике оказывается что это не так. Отсутствие директивы не запрещает доступ к данным, а при ее упоминании к примеру в видах
или
или
компилятор выдает
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);
...
}
...
Что ей надо?