Группировка полей для расчета формулы

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Группировка полей для расчета формулы

Сообщение rozum »

Всем доброго времени суток. Суть вопроса следующая. Пишу vip интерфейс.Пытаюсь произвести подсчет сумм по условию, но вместо одной строки получаю 4 то есть например в организации есть 4 услуги , первое что я делаю это отбираю услуги по первым трем символам кода( каждая услуга расчет верно) например
1 код "007001" сумма 20
2 код "007002" сумма 10
3 код "006001" сумма 5
4 код "006002" сумма 50
пытаюсь выбросить из временной таблицы в excel в таком виде
Организация | 30 | 55 |
в итоге у меня в Excel
организация 20
организация 10
организация 5
организация 50

вот то что я пишу в коде
procedure MakeTable;
{
startNewVisual(vtNumericVisual, vftimer + vfBreak + vfConfirm, 'Анализ данных...', 1);
_loop Sgoods
{
_loop spvidsobsl
{
if ( GetFirst katusl = tsOk )
_loop Sptarifpso
if(GetFirst tarifpso = tsOk )
{
if not ( month(tarifpso.datebeg) = wMes and year(tarifpso.datebeg) = wYear )
continue;
if ( GetFirst rstoUsl where (( sgoods.invnumb==rsto.invnom and katusl.kod == rstoUsl.kodusl )) <> tsOk )
{
ClearBuffer(#rstoUsl);
rstoUsl.kodusl := katusl.kod;
insert current rstoUsl;
}
if ( GetFirst rsto where (( katusl.kod == rsto.kodusl )) = tsOk )
{
if substr(KATUSL.KOD, 1, 3) = 'О07'
rsto.Sumto1:=rsto.Sumto1 + ((sgoods.wuse-Sptarifpso.maxfloor)*Sptarifpso.ost+SPTARIFPSO.BAZA)

if substr(KATUSL.KOD,1,3)='О06'
rsto.Sumto2:= rsto.Sumto2 + ((sgoods.wuse-Sptarifpso.maxfloor)*Sptarifpso.ost+SPTARIFPSO.BAZA)*12
update current rsto;
}
else
{
ClearBuffer(#rsto);
rsto.kodorg := katorg.code;
rsto.OrgName := KatOrg.Name;
rsto.kolost := sgoods.wuse;
rsto.invnom := sgoods.INVNUMB;
rsto.datetarif := Tarifpso.datebeg;
rsto.kodtarif := Tarifpso.kod;
rsto.kodusl := katusl.kod;
rsto.vidobsl:=vidsobsl.name;
if substr(KATUSL.KOD,1,3) = 'О07'
rsto.Sumto1:= ((sgoods.wuse-Sptarifpso.maxfloor)*Sptarifpso.ost+SPTARIFPSO.BAZA)
if substr(KATUSL.KOD,1,3)='О06'
rsto.Sumto2:= ((sgoods.wuse-Sptarifpso.maxfloor)*Sptarifpso.ost+SPTARIFPSO.BAZA)*12
insert current rsto;
}
if (not NextVisual)
break;
}
}
}
Stopvisual('', 0);
}

За ранее благодарю
предполагаю что сама уже зациклилась и не вижу
Irina_
Местный житель
Сообщения: 547
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Группировка полей для расчета формулы

Сообщение Irina_ »

Здравствуйте. Я так поняла, что в ТП rsto должна быть собрана инфо в разрезе организаций и услуг. А Вы в коде ниже делаете поиск только по услуге, без учета организации:
if ( GetFirst rsto where (( katusl.kod == rsto.kodusl )) = tsOk )
Да и услугу здесь Вы ищете по полному коду, а Вам же надо по первым 3 символам.
И думаю будет правильно в структуру ТП rsto добавить Nrec организации, т. к. поля Rsto.Kodorg и Rsto.Orgname могут быть не уникальны.

P.S. Хочу обратить внимание на исходную структуру Вашей ТП. На мой взгляд, если Вы планировали собирать инфо в разрезе организаций и услуг, то не стоило выделять отдельно поля Sumto1 и SumTo2 – достаточно одного поля. А если вы выделили 2 поля, то думаю лишним собирать в указанном разрезе, достаточно собирать только по организациям.
В 1 случае перед выводом ТП надо еще делать суммирование, а во 2 случае просто выводить, т. к. инфо уже будет собрана по организациям. Т.е. от исходной структуры будет зависеть и алгоритм наполнения и вывода ТП.
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Re: Группировка полей для расчета формулы

Сообщение rozum »

Спасибо за подсказку исправила в присвоении rsto.kodusl==substr(katusl.kod,1,3) теперь вместо 4 строк осталось две только подсчитало в строках
смотрю дальше как перевернуть по столбцам :???:
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Re: Группировка полей для расчета формулы

Сообщение rozum »

:grin: спасибо! решила сей вопрос.пересмотрела и группировку и подцепки! все заработало
Ответить