Суммирование при циклической обработке в ТХО
Модераторы: m0p3e, edward_K, Модераторы
Суммирование при циклической обработке в ТХО
Добрый день!
Давно терзает этот вопрос, но раньше всячески обходил его стороной. Можно ли используя циклическую обработку получать не по проводке на каждую строчку, а общую проводку?
Вот откуда вопрос вырос сейчас:
Необходимо привязав к накладной ТХО получить две проводки - одну по позициям с партиями у которых задана валюта и одну по позициям с партиями без валют.
Использую для этого следующие алгоритмы:
&1 = coTXOGetField('SPSOPR','CPARTY',&SoprDoc[Рез:СпНаклАкта])
&2 = coTXOGetField('KATPARTY','CVALPAR',&1)
Алгоритм в НДЕ = if(&2>0,&NP_,0)
Таким образом я получаю на каждую позицию накладной отдельную проводку, но мне нужна общая, потому что аналитик никаких по счету не ведется.
Может есть какие-нибудь команды, которые схлопывают одинаковые проводки, суммируя их? Или может мою задачу можно решить другим путем? Просто не нашел как еще можно добраться до валюты партии...
Давно терзает этот вопрос, но раньше всячески обходил его стороной. Можно ли используя циклическую обработку получать не по проводке на каждую строчку, а общую проводку?
Вот откуда вопрос вырос сейчас:
Необходимо привязав к накладной ТХО получить две проводки - одну по позициям с партиями у которых задана валюта и одну по позициям с партиями без валют.
Использую для этого следующие алгоритмы:
&1 = coTXOGetField('SPSOPR','CPARTY',&SoprDoc[Рез:СпНаклАкта])
&2 = coTXOGetField('KATPARTY','CVALPAR',&1)
Алгоритм в НДЕ = if(&2>0,&NP_,0)
Таким образом я получаю на каждую позицию накладной отдельную проводку, но мне нужна общая, потому что аналитик никаких по счету не ведется.
Может есть какие-нибудь команды, которые схлопывают одинаковые проводки, суммируя их? Или может мою задачу можно решить другим путем? Просто не нашел как еще можно добраться до валюты партии...
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Суммирование при циклической обработке в ТХО
по-моему аналитики по валютам нет... если только через ТХО Апи. там можно все
Re: Суммирование при циклической обработке в ТХО
Да... ТХО Апи это вариант который подходит к любым задачам... В принципе и опыт написания небольшой есть, но ради такой пустяшной задачи городить ТХО Апи... =)Алексей писал(а):по-моему аналитики по валютам нет... если только через ТХО Апи. там можно все
-
- Местный житель
- Сообщения: 1357
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: СПб, ЭП-Аудит
- Контактная информация:
Re: Суммирование при циклической обработке в ТХО
Можно и без ТХО API обойтись. Через одно место, но все же можно:
Сделайте забалансовый счет с аналитикой по сопроводительным документам, пользовательской по валютам.
Делайте проводки на забалансовый счет. Потом обрабатывайте OBOROT-ом или PAT-том. И будет вам одна проводка.
Сделайте забалансовый счет с аналитикой по сопроводительным документам, пользовательской по валютам.
Делайте проводки на забалансовый счет. Потом обрабатывайте OBOROT-ом или PAT-том. И будет вам одна проводка.
Re: Суммирование при циклической обработке в ТХО
Громоздко конечно, но за отличную идею спасибо! =)Seybukan писал(а):Можно и без ТХО API обойтись. Через одно место, но все же можно:
Сделайте забалансовый счет с аналитикой по сопроводительным документам, пользовательской по валютам.
Делайте проводки на забалансовый счет. Потом обрабатывайте OBOROT-ом или PAT-том. И будет вам одна проводка.
-
- Местный житель
- Сообщения: 1357
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: СПб, ЭП-Аудит
- Контактная информация:
Re: Суммирование при циклической обработке в ТХО
Голь на выдумку хитра.
Re: Суммирование при циклической обработке в ТХО
Лучше на VIP алгоритм сделайте, ну или уломайте Plinda опубликовать его версию SQL-алгоритма http://www.tyumbit.ru/gal_forum/viewtop ... =4&t=10956
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Суммирование при циклической обработке в ТХО
проще самому сделать . Идея то простая. Правда, могет быть тробла если с первасива переходили на mssql и в базе есть случайные nrec.
Re: Суммирование при циклической обработке в ТХО
Пока сделаем через параллельный план счетов с сворачиванием итога через OBOROT. VIP оставим в загашнике пока эта монструозная ТХО не начнет тупить. =)LaaLaa писал(а):Лучше на VIP алгоритм сделайте, ну или уломайте Plinda опубликовать его версию SQL-алгоритма http://www.tyumbit.ru/gal_forum/viewtop ... =4&t=10956
Жаль что в системе нет такой банальной функции стандартно... но видимо не очень востребовано.
Re: Суммирование при циклической обработке в ТХО
Какие такие случайные nrec'и?? С этого места можно поподробней? я записываю...edward_K писал(а):проще самому сделать . Идея то простая. Правда, могет быть тробла если с первасива переходили на mssql и в базе есть случайные nrec.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Суммирование при циклической обработке в ТХО
очень длинные 4.......... я столкнулся с тем что прямые запросы к субд иногда умудряются криво обработаться, вроде и запрос то простой, и полей нет с типом comp - а тем не менее не все данные тянутся. В детали пока не вдавался.
-
- Постоянный гость
- Сообщения: 76
- Зарегистрирован: 07 июн 2007, 12:32
- Откуда: Витебск
- Контактная информация:
Re: Суммирование при циклической обработке в ТХО
Тоже столкнулся с проблемой суммирования проводок в ТХО.
Пришлось написать TXO API для суммирования однотипных проводок.
Может кому пригодится.
После сборки, в перечне алгоритмов появится TxoCalcIdent.
Нужно создать новую строку в хозоперации, и выбрать &VIP[Obj:"TXOCALCIDENT"]
Пришлось написать TXO API для суммирования однотипных проводок.
Может кому пригодится.
После сборки, в перечне алгоритмов появится TxoCalcIdent.
Нужно создать новую строку в хозоперации, и выбрать &VIP[Obj:"TXOCALCIDENT"]
Код: Выделить всё
#include TxoApi.vih
#include ShowKau.vpp
// Указываем, что наш интерфейс реализует расчет идентификатора ТХО
#component "F_TXOAPI"
VipInterface Txo_TxoCalcIdent implements F_TXOAPI::ObjTxoIdentPlugin;
#component "F_TXOAPI"
// Простой интерфейс для обработки накладной
Interface Txo_TxoCalcIdent;
// Логическая таблица, описывает стуктуру накладной
create view DemoView
var
CurTiDkGal : word;
CurSoprDoc : comp;
P1 : String;
P2 : String;
as select
*
from
Oborot,
Oborot OborotTemp(memory),
Oborot Oborot1;
;
function GetInfo : string;
{
GetInfo := 'Объединение однотипных проводок';
}
function ParamMaster : string;
{
Message(''#3'здесь должен быть вызов окошка, чтобы помочь пользователю'#13+
''#3'заполнить строку дополнительных параметров идентификатора:'#13+
''#3'[Param1:"xxx"][Param2:"yyy"]');
ParamMaster := '[Param1:"xxx"][Param2:"yyy"]';
}
procedure StoreCycles(hTxo : longint; buf : TTxoApiInfoDoc);
{
CurTiDkGal := buf.TiDkGal;
CurSoprDoc := buf.cSoprDoc;
var isNew:boolean;
isNew:=True;
_loop Oborot where ((CurTiDkGal == Oborot.Tidk and CurSoprDoc==Oborot.cSoprDoc))
{
//проверка однотипности проводки по счету,субсчету, КАУ1..6 и подразделению
_loop OborotTemp
{
isNew:=True;
if Oborot.Scheto = OborotTemp.Scheto and
Oborot.SubOsSch = OborotTemp.SubOsSch and
Oborot.KauOs[1] = OborotTemp.KauOs[1] and
Oborot.KauOs[2] = OborotTemp.KauOs[2] and
Oborot.KauOs[3] = OborotTemp.KauOs[3] and
Oborot.KauOs[4] = OborotTemp.KauOs[4] and
Oborot.KauOs[5] = OborotTemp.KauOs[5] and
Oborot.KauOs[6] = OborotTemp.KauOs[6] and
Oborot.KodSpo = OborotTemp.KodSpo and
Oborot.SchetK = OborotTemp.SchetK and
Oborot.SubSchK = OborotTemp.SubSchK and
Oborot.KauKs[1] = OborotTemp.KauKs[1] and
Oborot.KauKs[2] = OborotTemp.KauKs[2] and
Oborot.KauKs[3] = OborotTemp.KauKs[3] and
Oborot.KauKs[4] = OborotTemp.KauKs[4] and
Oborot.KauKs[5] = OborotTemp.KauKs[5] and
Oborot.KauKs[6] = OborotTemp.KauKs[6] and
Oborot.KodSpK = OborotTemp.KodSpK and
Oborot.DatOb = OborotTemp.DatOb and
Oborot.KodValut = OborotTemp.KodValut
{
isNew:=False;
break;
}
}
if isNew
{
OborotTemp.buffer:=Oborot.buffer;
insert current OborotTemp;
}
else
{
OborotTemp.SumOb:=OborotTemp.SumOb+Oborot.SumOb;
OborotTemp.SumValut:=OborotTemp.SumValut+Oborot.SumValut;
update current OborotTemp;
}
delete current Oborot;
}
_loop OborotTemp
{
Oborot.buffer:=OborotTemp.buffer;
insert current Oborot;
}
}
end.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Суммирование при циклической обработке в ТХО
Да уж - и сколько по времени сие пашет? Чем больше проводок накопили, тем все медленнее и медленнее.
Вообще тема для программирования.
А так можно на DSQL собрать
1. объявить временную таблу
table struct tmp_oboort = Oborot ; Я вообще то не поленился и прописал все поля - так запрос писать проще да заодно от массивов избавился + добавил поле со счетчиком чтобы потом не обрабатывать уже уникальные разрезы
2. Выгрузить в нее все поля из Oborot
Вот эти слегка по другому
,sum(SumOb) as SumOb
,sum(SumValut) as SumValut
,sum(Kol) as Kol
,sum(ConvSum) as ConvSum
,min(Nrec) as Nrec
остальные по вкусу. Порядок должен точно соотв. tmp_oboort. Поля без формул должны быть повторены в group by(Я теперь поля в select и в group by вывожу одной и той же функцией в которой некоторые поля для group by гашу
3. Выполнить запрос
4. Пробежаться по tmp_oborot.
пробежаться по Oborot по условию
там где Oborot.nrec совпал с tmp_oborot записать сумму и кол-во, остальные удалить.
+ скорость, меньше записей в журнал и так далее.
Решение есть и готовое.
Вообще тема для программирования.
А так можно на DSQL собрать
1. объявить временную таблу
table struct tmp_oboort = Oborot ; Я вообще то не поленился и прописал все поля - так запрос писать проще да заодно от массивов избавился + добавил поле со счетчиком чтобы потом не обрабатывать уже уникальные разрезы
2. Выгрузить в нее все поля из Oborot
Вот эти слегка по другому
,sum(SumOb) as SumOb
,sum(SumValut) as SumValut
,sum(Kol) as Kol
,sum(ConvSum) as ConvSum
,min(Nrec) as Nrec
остальные по вкусу. Порядок должен точно соотв. tmp_oboort. Поля без формул должны быть повторены в group by(Я теперь поля в select и в group by вывожу одной и той же функцией в которой некоторые поля для group by гашу
3. Выполнить запрос
4. Пробежаться по tmp_oborot.
пробежаться по Oborot по условию
там где Oborot.nrec совпал с tmp_oborot записать сумму и кол-во, остальные удалить.
+ скорость, меньше записей в журнал и так далее.
Решение есть и готовое.
Re: Суммирование при циклической обработке в ТХО
Чего мучаетесь...
SQLTXO - в стандартной поставке галактики с весны чтоль.
Топсофт реализовал кривовато первоначальную задумку, но вроде работает. Если не совсем понятно как работает, опишите необходимый алгоритм. На примере понятно лучше
SQLTXO - в стандартной поставке галактики с весны чтоль.
Топсофт реализовал кривовато первоначальную задумку, но вроде работает. Если не совсем понятно как работает, опишите необходимый алгоритм. На примере понятно лучше