Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
12 Дек 2017, 19:09
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: секции в макете отчета  (Прочитано 9912 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн maxkov

  • *
  • Сообщений: 36
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-10-11
  • Сайт: 
Подскажите, как поправить макет или же запрос и его вывод в макет, чтобы все получилось правильно.
Скрины вложил. Там вся суть проблемы.

Процедура Запрос()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Запрос)
|Период с ВыбНачПериода по ВыбКонПериода;
|Номенклатура = Регистр.Продажи.Номенклатура;
|Контрагент = Регистр.Продажи.Контрагент;
|Количество = Регистр.Продажи.Количество;
|Функция КоличествоСумма = Сумма(Количество);
|Группировка Номенклатура упорядочить по Номенклатура.Наименование;
|Группировка Контрагент упорядочить по Контрагент.Наименование;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Запрос");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл
// Заполнение полей Номенклатура
Пока Запрос.Группировка(2) = 1 Цикл
Таб.ВывестиСекцию("Номенклатура");

// Заполнение полей Контрагент
Таб.ВывестиСекцию("Контра");
КонецЦикла;
КонецЦикла;
// Заполнение полей "Итого"
Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Запрос", "");
КонецПроцедуры


Оффлайн ОльгаН

  • **
  • Сообщений: 90
  • РЕПУТАЦИЯ: 14
  • КПД: 16%
  • Регистрация: 2011-07-11
  • Сайт: 
  • Профессия: Ученик 1С
Вы хотите перечислить в заголовке таблицы всех контрагентов, а далее на пересечении строки Номенклатура и столбца Контрагент проставить Сумму?

Оффлайн maxkov

  • *
  • Сообщений: 36
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-10-11
  • Сайт: 
Да, именно так.

Оффлайн ОльгаН

  • **
  • Сообщений: 90
  • РЕПУТАЦИЯ: 14
  • КПД: 16%
  • Регистрация: 2011-07-11
  • Сайт: 
  • Профессия: Ученик 1С
Алгоритм такой: выбираете всех возможных контрагентов из запроса, пробегая по ним в цикле и используя метод ПрисоединитьСекцию, формируете шапку документа. Затем организуете перебор строк запроса в двойном цикле, далее опять же пробегая по контрагентам и сравнивая контрагента из шапки с контрагентом из запроса и опять же применяя метод ПрисоединитьСекцию, формируете строку документа. Если описание алгоритма для Вас непонятно, то могу подсказать код и объяснить (если это Вам нужно) каждую строку кода (но в личке)

Оффлайн maxkov

  • *
  • Сообщений: 36
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-10-11
  • Сайт: 
Алгоритм-то понятен, но дело в том, что всего 3 дня знаком с семеркой, и совсем запутался в синтаксисе, а срок горит.

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

Результат и макет прикреплены.

Оффлайн ОльгаН

  • **
  • Сообщений: 90
  • РЕПУТАЦИЯ: 14
  • КПД: 16%
  • Регистрация: 2011-07-11
  • Сайт: 
  • Профессия: Ученик 1С
Попробуйте изменить Ваш кусок кода Таб = СоздатьОбъект("Таблица");    Таб.ИсходнаяТаблица("Запрос");            Пока ТЗ.ПолучитьСтроку() = 1 Цикл          Таб.ВывестиСекцию("Заголовок|Секция_1");    КонецЦикла; на такой:
 Таб = СоздатьОбъект("Таблица");    Таб.ИсходнаяТаблица("Запрос"); Таб.ВывестиСекцию("Заголовок|Секция_1");  Для й =1 по ТЗ.КоличествоСтрок()  Цикл  ТЗ.ПолучитьСтрокуПоНомеру(й);        Таб.ПрисоединитьСекцию("Заголовок|Контра");    КонецЦикла;
Должна получиться нужная Вам шапка. Только в макете в Заголовок|Контра проставьте ТЗ.Контрагент.

Оффлайн ОльгаН

  • **
  • Сообщений: 90
  • РЕПУТАЦИЯ: 14
  • КПД: 16%
  • Регистрация: 2011-07-11
  • Сайт: 
  • Профессия: Ученик 1С
Вдогонку. научите, пожал-ста, выкладывать код.

Оффлайн maxkov

  • *
  • Сообщений: 36
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-10-11
  • Сайт: 
В режиме "Ответ" (не "быстрый ответ") вставив код, выделите его и нажмите кнопку решетки (см.рис.)

Оффлайн ОльгаН

  • **
  • Сообщений: 90
  • РЕПУТАЦИЯ: 14
  • КПД: 16%
  • Регистрация: 2011-07-11
  • Сайт: 
  • Профессия: Ученик 1С
Спасибо за ответ. Шапка получилась?

Оффлайн maxkov

  • *
  • Сообщений: 36
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-10-11
  • Сайт: 
Сейчас попробую. Макет правильно исправил?


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
168 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
55 Сообщений
alex0402
48 Сообщений
andron81_81
42 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 364
  • Точка Скрытых: 0
  • Точка Пользователей: 7
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal