Имя: Пароль:
1C
1C 7.7
v7: реестр накладных в разрезе ТМЦ
0 anagk
 
23.10.12
09:49
Уж, помогите еще с отчетом, пожалуйста.
Сам отчет работает, но чуток подправить - не получается.
1 anagk
 
23.10.12
09:51
//*******************************************
Процедура Сформировать()
   т = СоздатьОбъект("ТаблицаЗначений");
   т.НоваяКолонка("Дата","Дата");
   т.НоваяКолонка("Контрагент", "Справочник.Контрагенты");
   т.НоваяКолонка("ТМЦ", "Справочник.ТМЦ");
   т.НоваяКолонка("Кво", "Число", 16, 3);
   т.НоваяКолонка("Сумма", "Число", 16, 2);
   
   
   Запрос = СоздатьОбъект("Запрос");
   
   ТекстЗапр = "//{{ЗАПРОС(Запрос)
   |Период с НачДата по КонДата;
   |РасходнаяНакладная = Документ.РасходнаяНакладная.ТекущийДокумент;
   |Клиент = Документ.РасходнаяНакладная.Контрагент;
   |Товар = Документ.РасходнаяНакладная.ТМЦ;
   |Количество = Документ.РасходнаяНакладная.Кво;
   |Сумма = Документ.РасходнаяНакладная.СуммаСНДС;
   |Функция КоличествоСумма = Сумма(Количество);
   |Функция СуммаСумма = Сумма(Сумма);
   |Группировка РасходнаяНакладная;
   |Группировка Товар;
   |Условие(Клиент в ВыбКонтрагенты);
   |Условие(Товар в ВыбТМЦ);
   |";//}}ЗАПРОС
   
   Если Запрос.Выполнить(ТекстЗапр) = 0 Тогда
       Возврат;
   КонецЕсли;
   Пока Запрос.Группировка("РасходнаяНакладная") = 1 Цикл
       Пока Запрос.Группировка("Товар") = 1 Цикл
           Если Запрос.Товар.ВидТМЦ = Перечисление.ВидыТМЦ.Продукция тогда
               т.НоваяСтрока();
               т.Дата = Запрос.РасходнаяНакладная.ДатаДок;
               т.Контрагент = Запрос.Клиент;
               т.ТМЦ = Запрос.Товар;
               т.Кво = Запрос.Количество;
               т.Сумма = Запрос.Сумма;
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
   
   Если фДни = 0 Тогда
       т.Свернуть("Контрагент, ТМЦ", "Кво, Сумма");
       т.Сортировать("Контрагент,ТМЦ ");
   Иначе
       т.Свернуть("Дата, ТМЦ", "Кво, Сумма");
       т.Сортировать("Дата,ТМЦ ");
   КонецЕсли;
   
   тИ = СоздатьОбъект("ТаблицаЗначений");
   т.Выгрузить(тИ);
   Если фДни = 1 Тогда
       тИ.Свернуть("Дата", "Кво, Сумма");
       тИ.Сортировать("Дата");    
   Иначе
       тИ.Свернуть("Контрагент", "Кво, Сумма");
       тИ.Сортировать("Сумма-, Контрагент");
   КонецЕсли;
   тТ = СоздатьОбъект("ТаблицаЗначений");
   т.Выгрузить(тТ);
   тТ.Свернуть("ТМЦ", "Кво, Сумма");
   квотТ = тТ.КоличествоСтрок();
   тТ.Сортировать("ТМЦ+");
   Таб = СоздатьОбъект("Таблица");
   заг = "Реализация готовой продукции по ";
   Если ВыбКонтрагенты.Выбран() = 1 Тогда
       заг = заг + ВыбКонтрагенты.Наименование;
   Иначе
       заг = заг + "покупателям";
   КонецЕсли;
   Если фДни = 1 Тогда
       заг1 = "Дата";
   Иначе
       заг1 = "Покупатели";
   КонецЕсли;
   Таб.ВывестиСекцию("Секция_4|Секция_1");
   тТ.ВыбратьСтроки();
   Пока тТ.ПолучитьСтроку() = 1 Цикл
       Таб.ПрисоединитьСекцию("Секция_4|Секция_2");
   КонецЦикла;
   Таб.ПрисоединитьСекцию("Секция_4|Секция_3");
   Если фДни = 0 Тогда
       Таб.ПрисоединитьСекцию("Секция_4|Секция_33");
   КонецЕсли;
   тИ.ВыбратьСтроки();
   Пока тИ.ПолучитьСтроку() = 1 Цикл
       Таб.ВывестиСекцию("Секция_5|Секция_1");
       стр = 0;    стртТ = 1;
       Если фДни = 1 Тогда
           тек = тИ.Дата;
           стек = "Дата";
       Иначе
           тек = тИ.Контрагент;
           стек = "Контрагент";
       КонецЕсли;
       Пока т.НайтиЗначение(тек, стр, стек) = 1 Цикл
           т.ПолучитьСтрокуПоНомеру(стр);
           послСтр = 0;
           Для ии=стртТ По квотТ Цикл
               тТ.ПолучитьСтрокуПоНомеру(ии);
               Если тТ.ТМЦ.Код <> т.ТМЦ.Код Тогда
                   Таб.ПрисоединитьСекцию("Секция_5|Секция_22");
               Иначе
                   Таб.ПрисоединитьСекцию("Секция_5|Секция_2");
                   стртТ = тТ.НомерСтроки + 1;
                   послСтр = тТ.НомерСтроки;
                   Прервать;
               КонецЕсли;
               
           КонецЦикла;
           т.УдалитьСтроку(стр);
           стр = 0;
       КонецЦикла;
       Для иии=послСтр+1 По квотТ Цикл
           Таб.ПрисоединитьСекцию("Секция_5|Секция_22");
       КонецЦикла;
       Таб.ПрисоединитьСекцию("Секция_5|Секция_3");
       Если фДни = 0 Тогда
           Таб.ПрисоединитьСекцию("Секция_5|Секция_33");
       КонецЕсли;
       
   КонецЦикла;
   //итоговая строка
   Таб.ВывестиСекцию("Секция_6|Секция_1");
   тТ.ВыбратьСтроки();
   Пока тТ.ПолучитьСтроку() = 1 Цикл
       Таб.ПрисоединитьСекцию("Секция_6|Секция_2");    
   КонецЦикла;
   
   Таб.ПрисоединитьСекцию("Секция_6|Секция_3");
   Если фДни = 0 Тогда
       Таб.ПрисоединитьСекцию("Секция_6|Секция_33");
   КонецЕсли;
   
   Таб.ПараметрыСтраницы(2,,,10,0,5,0,0,0,1);
   Таб.ТолькоПросмотр(0);
   Таб.Защита(0);
   Таб.Опции(0,0,,);
   Таб.Показать("Реализация:","");
КонецПроцедуры
2 anagk
 
23.10.12
09:53
в даном Запросе нужно только убрать Группировку (Свернуть) по клиентам, нужно, чтобы ТМЦ группировало, а вот Клиенты, чтобы по каждой накладной были
3 anagk
 
23.10.12
09:53
сейчас отчет сворачивает и по клиентам и по ТМЦ
4 Мимохожий Однако
 
23.10.12
09:57
ОФФ: Студия одного актера...
чем не угодил типовой отчет?
5 anagk
 
23.10.12
09:58
типовой??
6 Ёпрст
 
гуру
23.10.12
10:00
(0)
выкинуть все ТЗ, воткнуть условие в текст запроса на Перечисление.ВидыТМЦ.Продукция, далее тупо обойти группировки отчета.
Всё.
7 Ёпрст
 
гуру
23.10.12
10:01
+6 обойти группировки запроса
Ошибка? Это не ошибка, это системная функция.