Имя: Пароль:
1C
1С v8
Вывести колонки в ручном отчете
0 D_Sergeevich
 
13.09.13
11:55
Приветствую.
Нужен отчет типа такого http://i57.fastpic.ru/big/2013/0912/a2/162b2850f5e752ee63775dcb4904bfa2.png

Нарисовал макет http://i60.fastpic.ru/big/2013/0913/7b/06c4c7ce12b3203a78c1c6ea8f74427b.png
Для наглядности результат запроса http://i59.fastpic.ru/big/2013/0913/bd/e7338732d12ea57e08794f4cf8a519bd.png

Помогите разобраться что где когда вставлять и выводить

Процедура СформироватьОтчет(НачалоПериода, КонецПериода, Валюта)
   Макет = Отчеты.ГлавнаяКнига.ПолучитьМакет("Книга");
   ОблШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
   ОблДанные = Макет.ПолучитьОбласть("Данные");
   ОблСчет = Макет.ПолучитьОбласть("ШапкаТаблицы|Счет");
   ОблИтоги = Макет.ПолучитьОбласть("Итоги");
   ОблСальдо = Макет.ПолучитьОбласть("Сальдо");
   ТабДок.Очистить();
  
   ТабДок.Вывести(ОблШапкаТаблицы);

   Запрос = Новый Запрос;
   Запрос.Текст =
      "ВЫБРАТЬ
      |   ФинансовыйОбороты.Счет.Код КАК СчетКод,
      |   ВЫБОР
      |      КОГДА ФинансовыйОбороты.Валюта.Наименование = ""RUP""
      |         ТОГДА ФинансовыйОбороты.СуммаОборотДт
      |      ИНАЧЕ ФинансовыйОбороты.СуммаВалОборотДт
      |   КОНЕЦ КАК Дебет,
      |   ВЫБОР
      |      КОГДА ФинансовыйОбороты.Валюта.Наименование = ""RUP""
      |         ТОГДА ФинансовыйОбороты.СуммаОборотКт
      |      ИНАЧЕ ФинансовыйОбороты.СуммаВалОборотКт
      |   КОНЕЦ КАК Кредит,
      |   ФинансовыйОбороты.Период КАК Период,
      |   ВЫБОР
      |      КОГДА ФинансовыйОстаткиИОбороты.Валюта.Наименование = ""RUP""
      |         ТОГДА ФинансовыйОстаткиИОбороты.СуммаНачальныйОстатокДт
      |      ИНАЧЕ ФинансовыйОстаткиИОбороты.СуммаВалНачальныйОстатокДт
      |   КОНЕЦ КАК НаНачалоДт,
      |   ВЫБОР
      |      КОГДА ФинансовыйОстаткиИОбороты.Валюта.Наименование = ""RUP""
      |         ТОГДА ФинансовыйОстаткиИОбороты.СуммаКонечныйОстатокДт
      |      ИНАЧЕ ФинансовыйОстаткиИОбороты.СуммаВалКонечныйОстатокДт
      |   КОНЕЦ КАК НаКонецДт,
      |   ВЫБОР
      |      КОГДА ФинансовыйОстаткиИОбороты.Валюта.Наименование = ""RUP""
      |         ТОГДА ФинансовыйОстаткиИОбороты.СуммаКонечныйОстатокКт
      |      ИНАЧЕ ФинансовыйОстаткиИОбороты.СуммаВалКонечныйОстатокКт
      |   КОНЕЦ КАК НаКонецКт,
      |   ВЫБОР
      |      КОГДА ФинансовыйОстаткиИОбороты.Валюта.Наименование = ""RUP""
      |         ТОГДА ФинансовыйОстаткиИОбороты.СуммаНачальныйОстатокКт
      |      ИНАЧЕ ФинансовыйОстаткиИОбороты.СуммаВалНачальныйОстатокКт
      |   КОНЕЦ КАК НаНачалоКт
      |ИЗ
      |   РегистрБухгалтерии.Финансовый.Обороты(&НачалоПериода, &КонецПериода, Месяц, , , , , ) КАК ФинансовыйОбороты
      |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Финансовый.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Месяц, , , , ) КАК ФинансовыйОстаткиИОбороты
      |      ПО ФинансовыйОбороты.Счет = ФинансовыйОстаткиИОбороты.Счет
      |         И ФинансовыйОбороты.Период = ФинансовыйОстаткиИОбороты.Период
      |         И (ФинансовыйОстаткиИОбороты.Валюта = &Валюта)
      |ГДЕ
      |   ФинансовыйОбороты.Валюта = &Валюта
      |
      |УПОРЯДОЧИТЬ ПО
      |   Период,
      |   СчетКод
      |ИТОГИ
      |   СУММА(Дебет),
      |   СУММА(Кредит)
      |ПО
      |   ОБЩИЕ,
      |   Период,
      |   СчетКод
      |АВТОУПОРЯДОЧИВАНИЕ";

   Запрос.УстановитьПараметр("Валюта", Валюта);
   Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
   Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);

   Результат = Запрос.Выполнить();

   ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

   ВыборкаОбщийИтог.Следующий();      // Общий итог

   // Вставить обработку выборки ВыборкаОбщийИтог

   ВыборкаПериод = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

   Пока ВыборкаПериод.Следующий() Цикл
      // Вставить обработку выборки ВыборкаПериод
      
      
      ВыборкаСчетКод = ВыборкаПериод.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

      Пока ВыборкаСчетКод.Следующий() Цикл
         // Вставить обработку выборки ВыборкаСчетКод
      
         ВыборкаДетальныеЗаписи = ВыборкаСчетКод.Выбрать();

         Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            // Вставить обработку выборки ВыборкаДетальныеЗаписи
            
         КонецЦикла;
      КонецЦикла;
   КонецЦикла;
КонецПроцедуры
1 D_Sergeevich
 
13.09.13
12:27
Up
2 Любопытная
 
13.09.13
12:52
А чего период везде NULL?
Не, я так не напишу, надо руками щупать.
3 cw014
 
13.09.13
12:54
Ты бы картинки побольше бы сделал, а то открываются нагруженные женщинами сайты...

Номер Ж/О - +100500
4 D_Sergeevich
 
13.09.13
12:57
(2) Период не NULL, это где ненужно итогов там NULL
(3) Там на картинку просто нужно кликать, дэбильный хост по напихивал рекламы, больше им не буду пользоваться.
Номер Ж/О - это номер журнального ордера ))
5 Любопытная
 
13.09.13
12:58
Вот, вроде представила:
обходишь группировку по СчетКод, на каждую строку добавляешь колонку, заполняешь итоги, идешь внутрь до детальных записей, пишешь строки по месяцам. Если я правильно поняла, что у тебя в детальных записях
6 D_Sergeevich
 
13.09.13
13:13
Блин не выходит, все вперемешку как то. Вообще может есть где нибудь пример присоединения колонок?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший