Имя: Пароль:
1C
1C 7.7
v7: проблема с отчетом по таблице значений
0 sevensword
 
18.07.12
12:56
проблема с отчетом по таблице значений
в доке есть ТЗ, пытаюсь вывести отчет по этой таблице, в итоге получаю что с каждого дока тянется только по одной строчке, где ошибка подскажите плиз

Процедура Сформировать()
   Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |СменныйОтчет = Документ.СменныйОтчет.ТекущийДокумент;
   |ГСМ = Документ.СменныйОтчет.ГСМ;
   |фирма = Документ.СменныйОтчет.АЗС.фирма;
   |АЗС = Документ.СменныйОтчет.АЗС;
   |Объем = Документ.СменныйОтчет.Объем;
   |Сумма = Документ.СменныйОтчет.Сумма;
   //    |Товар = Справочник.ГруппыТоваров.Наименование;  
       
    //    |Товар = Документ.СменныйОтчет.;
//    |Фасовка = Документ.СменныйОтчет.количество;
   
   
   |Функция ОбъемСумма = Сумма(Объем);
   |Функция СуммаСумма = Сумма(Сумма);  
//    |Функция КоличествоСумма = Сумма(фасовка);
   
   
   |условие(азс в выб_азс);
   |Группировка АЗС без групп;
   |Группировка День;
   |Группировка ГСМ без групп;
   |Группировка товар без групп;
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;
   
   // Подготовка к заполнению выходных форм данными запроса
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Сформировать");
   // Заполнение полей "Заголовок"
   Таб.ВывестиСекцию("Заголовок");
   Состояние("Заполнение выходной таблицы...");
   
   _итого=0;
   
   док=создатьобъект("Документ.СменныйОтчет");
   Таб.Опции(0, 0,,, Таб.ВысотаТаблицы(), 0);  
       
   
   таб1=создатьобъект("ТаблицаЗначений");    
   таб1.Количествострок("8");
   таб1.новаяколонка("гсм","Справочник.Номенклатура");
   таб1.новаяколонка("сотр","Справочник.ГруппыТоваров");
   таб1.новаяколонка("кол","Число");
   таб1.новаяколонка("сум","Число");
   таб1.новаяколонка("азс","Справочник.МестаХранения");  
//    таб.новаяколонка("азс","Документ.сменныйотчет");
   

   Пока Запрос.Группировка(1) = 1 Цикл
   
       Таб.ВывестиСекцию("АЗС");        
   
       
   Пока Запрос.Группировка(2) = 1 Цикл


               
       _тов=0;    
           _подк=0;
           док.выбратьдокументы(Запрос.день,Запрос.день);
           Пока док.получитьдокумент()=1 Цикл
               Если док.проведен()=0 Тогда
                   продолжить;
               КонецЕсли;    
               
               Если пустоезначение(выб_азс)=0 тогда
                   если не(док.азс=выб_азс) Тогда
                       продолжить;
                   конецесли;
                   
               КонецЕсли;          
                               
       
           
               таб_группа=создатьобъект("ТаблицаЗначений");
           
                   значениеизстрокивнутр(док.стр_ТЗ_5).выгрузить(таб_группа);
       
               таб1.новаястрока();
       //    таб.азс=запрос.азс;  
   //        таб1.азс=запрос.азс;  
           таб1.сотр=таб_группа.группа;
       //    таб.азс=таб_группа.азс;
           таб1.кол=таб_группа.расх_кол;
           таб1.сум=таб_группа.сумма;
             
   
           
               ТЗ_5=создатьобъект("ТаблицаЗначений");
               ТЗ_5.загрузить(значениеизстрокивнутр(док.стр_ТЗ_5));
                 _тов=0;
                _подк=_подк+ТЗ_5.Итог("расх_кол");
               _тов=_тов+ТЗ_5.Итог("сумма");
           
   таб1_сотр=создатьобъект("ТаблицаЗначений");
//    таб.выгрузить(таб_гсм,,,"гсм,кол,сум");
   таб1.выгрузить(таб1_сотр,,,"кол,сум");
//    таб1.выгрузить(таб1_сотр,,,"кол,сум");
   
   
   Таб1.Сортировать("сотр");

   таб1_сотр.свернуть("сотр","кол,сум");  
           
Таб.ВывестиСекцию("Товар");
1 1Сергей
 
18.07.12
13:00
>>в доке есть ТЗ

ну-ну
2 Kreont
 
18.07.12
13:01
Тяжело что то понять в коде :(
В запросе 4 групировки, а тут для 2-ой = "День", вывод секции :Таб.ВывестиСекцию("Товар");
3 Ёпрст
 
18.07.12
13:01
тихий ужас
4 1Сергей
 
18.07.12
13:03
значениеизстрокивнутр(док.стр_ТЗ_5).выгрузить(таб_группа);
       
               таб1.новаястрока();
       //    таб.азс=запрос.азс;  

   //        таб1.азс=запрос.азс;  

           таб1.сотр=таб_группа.группа;
       //    таб.азс=таб_группа.азс;

           таб1.кол=таб_группа.расх_кол;
           таб1.сум=таб_группа.сумма;


Ясен перец, что только первая строка выдезет. Где перебор строк таб_группа?
5 Ёпрст
 
18.07.12
13:04
вот тут

таб1.новаястрока();
таб1.сотр=таб_группа.группа; //таб_группа не спозиционирована ни на какой строке, это раз, в таб_группа может быть не одна строка а несколько, это два..
6 Андрей_Андреич
 
naïve
18.07.12
13:04
значениеизстрокивнутр = значениеизбутылкивнутрь
7 sevensword
 
18.07.12
13:47
1Сергей спасибо, сделал перебор строк помогло
8 Ёпрст
 
18.07.12
13:51
(7) если че, выкини ВыбратьДокументы из кода нафик, + группировка день, воткни группировка Документ - имей сам документ на выходе запроса.
Потом ужо, извлекай свою ТЗ из строки.

Хотя, лучше переделай всё по-другому, чтоб не хранить инфу в строке неограниченной длины.
Закон Брукера: Даже маленькая практика стоит большой теории.