Всем доброго времени суток. Суть вопроса следующая. Пишу 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);
}  
За ранее благодарю
 предполагаю что сама  уже зациклилась и не вижу
			
			
									
						
										
						Группировка полей для расчета формулы
Модераторы: m0p3e, edward_K, Модераторы
- 
				Irina_
- Местный житель
- Сообщения: 557
- Зарегистрирован: 17 июл 2012, 11:56
- Откуда: Республика Беларусь, г.Могилев
Re: Группировка полей для расчета формулы
Здравствуйте. Я так поняла, что в ТП rsto должна быть собрана инфо в разрезе организаций и услуг. А Вы в коде ниже делаете поиск только по услуге, без учета организации:
if ( GetFirst rsto where (( katusl.kod == rsto.kodusl )) = tsOk )
Да и услугу здесь Вы ищете по полному коду, а Вам же надо по первым 3 символам.
И думаю будет правильно в структуру ТП rsto добавить Nrec организации, т. к. поля Rsto.Kodorg и Rsto.Orgname могут быть не уникальны.
P.S. Хочу обратить внимание на исходную структуру Вашей ТП. На мой взгляд, если Вы планировали собирать инфо в разрезе организаций и услуг, то не стоило выделять отдельно поля Sumto1 и SumTo2 – достаточно одного поля. А если вы выделили 2 поля, то думаю лишним собирать в указанном разрезе, достаточно собирать только по организациям.
В 1 случае перед выводом ТП надо еще делать суммирование, а во 2 случае просто выводить, т. к. инфо уже будет собрана по организациям. Т.е. от исходной структуры будет зависеть и алгоритм наполнения и вывода ТП.
			
			
									
						
										
						if ( GetFirst rsto where (( katusl.kod == rsto.kodusl )) = tsOk )
Да и услугу здесь Вы ищете по полному коду, а Вам же надо по первым 3 символам.
И думаю будет правильно в структуру ТП rsto добавить Nrec организации, т. к. поля Rsto.Kodorg и Rsto.Orgname могут быть не уникальны.
P.S. Хочу обратить внимание на исходную структуру Вашей ТП. На мой взгляд, если Вы планировали собирать инфо в разрезе организаций и услуг, то не стоило выделять отдельно поля Sumto1 и SumTo2 – достаточно одного поля. А если вы выделили 2 поля, то думаю лишним собирать в указанном разрезе, достаточно собирать только по организациям.
В 1 случае перед выводом ТП надо еще делать суммирование, а во 2 случае просто выводить, т. к. инфо уже будет собрана по организациям. Т.е. от исходной структуры будет зависеть и алгоритм наполнения и вывода ТП.
Re: Группировка полей для расчета формулы
Спасибо за подсказку исправила в присвоении rsto.kodusl==substr(katusl.kod,1,3)  теперь вместо 4 строк осталось две только подсчитало в строках 
смотрю дальше как перевернуть по столбцам
			
			
									
						
										
						смотрю дальше как перевернуть по столбцам

Re: Группировка полей для расчета формулы
 спасибо! решила сей вопрос.пересмотрела и группировку и подцепки! все заработало
   спасибо! решила сей вопрос.пересмотрела и группировку и подцепки! все заработало