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

Суммирование при циклической обработке в ТХО

Добавлено: 20 янв 2011, 17:24
spark
Добрый день!

Давно терзает этот вопрос, но раньше всячески обходил его стороной. Можно ли используя циклическую обработку получать не по проводке на каждую строчку, а общую проводку?

Вот откуда вопрос вырос сейчас:
Необходимо привязав к накладной ТХО получить две проводки - одну по позициям с партиями у которых задана валюта и одну по позициям с партиями без валют.
Использую для этого следующие алгоритмы:
&1 = coTXOGetField('SPSOPR','CPARTY',&SoprDoc[Рез:СпНаклАкта])
&2 = coTXOGetField('KATPARTY','CVALPAR',&1)
Алгоритм в НДЕ = if(&2>0,&NP_,0)

Таким образом я получаю на каждую позицию накладной отдельную проводку, но мне нужна общая, потому что аналитик никаких по счету не ведется.
Может есть какие-нибудь команды, которые схлопывают одинаковые проводки, суммируя их? Или может мою задачу можно решить другим путем? Просто не нашел как еще можно добраться до валюты партии...

Re: Суммирование при циклической обработке в ТХО

Добавлено: 20 янв 2011, 17:47
Алексей
по-моему аналитики по валютам нет... если только через ТХО Апи. там можно все :)

Re: Суммирование при циклической обработке в ТХО

Добавлено: 20 янв 2011, 17:54
spark
Алексей писал(а):по-моему аналитики по валютам нет... если только через ТХО Апи. там можно все :)
Да... ТХО Апи это вариант который подходит к любым задачам... В принципе и опыт написания небольшой есть, но ради такой пустяшной задачи городить ТХО Апи... =)

Re: Суммирование при циклической обработке в ТХО

Добавлено: 24 янв 2011, 12:40
Seybukan
Можно и без ТХО API обойтись. Через одно место, но все же можно:
Сделайте забалансовый счет с аналитикой по сопроводительным документам, пользовательской по валютам.
Делайте проводки на забалансовый счет. Потом обрабатывайте OBOROT-ом или PAT-том. И будет вам одна проводка.

Re: Суммирование при циклической обработке в ТХО

Добавлено: 24 янв 2011, 15:06
spark
Seybukan писал(а):Можно и без ТХО API обойтись. Через одно место, но все же можно:
Сделайте забалансовый счет с аналитикой по сопроводительным документам, пользовательской по валютам.
Делайте проводки на забалансовый счет. Потом обрабатывайте OBOROT-ом или PAT-том. И будет вам одна проводка.
Громоздко конечно, но за отличную идею спасибо! =)

Re: Суммирование при циклической обработке в ТХО

Добавлено: 24 янв 2011, 15:55
Seybukan
Голь на выдумку хитра. :)

Re: Суммирование при циклической обработке в ТХО

Добавлено: 24 янв 2011, 16:32
LaaLaa
Лучше на VIP алгоритм сделайте, ну или уломайте Plinda опубликовать его версию SQL-алгоритма http://www.tyumbit.ru/gal_forum/viewtop ... =4&t=10956

Re: Суммирование при циклической обработке в ТХО

Добавлено: 24 янв 2011, 16:59
edward_K
проще самому сделать :). Идея то простая. Правда, могет быть тробла если с первасива переходили на mssql и в базе есть случайные nrec.

Re: Суммирование при циклической обработке в ТХО

Добавлено: 24 янв 2011, 17:32
spark
LaaLaa писал(а):Лучше на VIP алгоритм сделайте, ну или уломайте Plinda опубликовать его версию SQL-алгоритма http://www.tyumbit.ru/gal_forum/viewtop ... =4&t=10956
Пока сделаем через параллельный план счетов с сворачиванием итога через OBOROT. VIP оставим в загашнике пока эта монструозная ТХО не начнет тупить. =)

Жаль что в системе нет такой банальной функции стандартно... но видимо не очень востребовано.

Re: Суммирование при циклической обработке в ТХО

Добавлено: 24 янв 2011, 17:34
spark
edward_K писал(а):проще самому сделать :). Идея то простая. Правда, могет быть тробла если с первасива переходили на mssql и в базе есть случайные nrec.
Какие такие случайные nrec'и?? С этого места можно поподробней? я записываю... ;-)

Re: Суммирование при циклической обработке в ТХО

Добавлено: 24 янв 2011, 22:52
edward_K
очень длинные 4.......... я столкнулся с тем что прямые запросы к субд иногда умудряются криво обработаться, вроде и запрос то простой, и полей нет с типом comp - а тем не менее не все данные тянутся. В детали пока не вдавался.

Re: Суммирование при циклической обработке в ТХО

Добавлено: 04 сен 2014, 16:33
Dmitry_Sol
Тоже столкнулся с проблемой суммирования проводок в ТХО.
Пришлось написать 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.

Re: Суммирование при циклической обработке в ТХО

Добавлено: 04 сен 2014, 16:56
edward_K
Да уж - и сколько по времени сие пашет? Чем больше проводок накопили, тем все медленнее и медленнее.
Вообще тема для программирования.
А так можно на 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: Суммирование при циклической обработке в ТХО

Добавлено: 18 сен 2014, 18:11
Plinda
Чего мучаетесь...

SQLTXO - в стандартной поставке галактики с весны чтоль.

Топсофт реализовал кривовато первоначальную задумку, но вроде работает. Если не совсем понятно как работает, опишите необходимый алгоритм. На примере понятно лучше