15 авг. 2012 г.

Произвольный макет в СКД II

Продолжаем углубляться в настройки компоновки данных. Теперь попробуем сделать полностью свой произвольный макет на СКД (ссылка на пример в конце текста). Здесь самое главное понять структуру областей макета в СКД. Разберем пример с неопределенным количеством колонок.

Заготовка для отчета выглядит так:

Пример результата:

Теперь создаем свой макет:

1. Добавляем шапку по аналогии с прошлым примером. Устанавливаем макет оформления "Без оформления". Итоги по номенклатуре выводить не будем, поэтому ставим у таблицы настройку "Расположение общих итогов по горизонтали" - "Нет".

2. Теперь создаем макет, прописываем параметры, настраиваем дополнительные свойства ячеек. Например, для номенклатуры можно выставить в свойстве "Размещение текста" значение "Переносить" вместо "Авто", а так же указать параметры расшифровки.

3. Теперь самое интересное, назначаем области. Структура областей будет выглядеть таким образом:

Начинаем создавать области, параметры при этом будут автоматически сопоставляться по именам. В итоге должно получиться следующее:

Проверяем отчет, должно получиться следующее:

4. Пишем код по аналогии с прошлым примером:

&НаСервере
Процедура УстановитьПараметрыКомпоновки()

 пОтчета = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Период");
 Если НЕ пОтчета = Неопределено Тогда
  пОтчета.Значение = Период;
 КонецЕсли;
 ПредставлениеПериода = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПредставлениеПериода");
 Если НЕ ПредставлениеПериода = Неопределено Тогда
  ПредставлениеПериода.Значение = "Заказы контрагентов за " + Формат(Период.ДатаНачала, "ДЛФ=Д") + " - " + Формат(Период.ДатаОкончания, "ДЛФ=Д");
 КонецЕсли;
 
КонецПроцедуры

&НаСервере
Процедура СформироватьНаСервере()

 УстановитьПараметрыКомпоновки();
 
 Результат.Очистить();

 СхемаКомпоновкиДанных = РеквизитФормыВЗначение("Отчет").СхемаКомпоновкиДанных;
 КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
 МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Отчет.КомпоновщикНастроек.Настройки, ДанныеРасшифровки);

 ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
 ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

 ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
 ПроцессорВывода.УстановитьДокумент(Результат);
 ПроцессорВывода.ОтображатьПроцентВывода = Истина;

 ПроцессорВывода.Вывести(ПроцессорКомпоновки); 
 
 //решил добавить колонтитулы :)
 Результат.НижнийКолонтитул.Выводить = Истина; 
 Результат.НижнийКолонтитул.НачальнаяСтраница = 1;
 ШрифтКолонтитула=Новый Шрифт("Arial", 6);
    Результат.НижнийКолонтитул.Шрифт=ШрифтКолонтитула;
 Результат.НижнийКолонтитул.ТекстСлева  = "Тест СКД";

КонецПроцедуры

&НаКлиенте
Процедура Сформировать(Команда)
 
 СформироватьНаСервере();
 
КонецПроцедуры


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
 
 Период.ДатаНачала = НачалоМесяца(ТекущаяДата());
 Период.ДатаОкончания = ТекущаяДата();
 
КонецПроцедуры

В итоге у нас получается следующее:

Кстати, при последующем открытии отчета, вы увидите, что компоновка перестроила макет по-своему. Это вполне нормально, не стоит беспокоиться.

И конечно, выгрузка базы.

27 комментариев:

  1. А что, если колонку итоговую тоже нужно вывести? Вот как раз к ней то у меня и не получается макет прицепить.

    ОтветитьУдалить
    Ответы
    1. Привет, давай рассмотрим на примере этого отчета. Для включения нужных итогов в настройках таблицы отключим принудительный запрет вывода итогов по горизонтали. Если запусти отчет, то итоги появятся, останется только настроить макет. Для этого добавляем:
      - макет группировки по полю "Контрагент", тип макета "Общий итог заголовок" для заголовка "Итого";
      - макет ресурсов таблицы по полям "Номенклатура"/"Контрагент", тип макет "Общий итог заголовок" для итоговых значений.
      Скринкаст можно посмотреть здесь http://youtu.be/0Eg2GyFbx6U

      Удалить
  2. Добрый день. Имеется отчет СКД с самописным макетом(рис 1 и 2). На рис 3 и 4 в итогах(последняя строчка отчета) непонятно как выводятся данные. Пожалуйста, ткните меня носом, что я не так делаю.

    http://pixs.ru/showimage/1JPG_4184749_11374249.jpg
    рис 1

    http://pixs.ru/showimage/2JPG_9734227_11374260.jpg
    рис 2

    http://pixs.ru/showimage/3JPG_4361730_11374264.jpg
    рис 3

    http://pixs.ru/showimage/4JPG_2003550_11374266.jpg
    рис 4

    ОтветитьУдалить
    Ответы
    1. День добрый. Навскидку, не назначен макет для общего итога по строке, Попробуй добавить макет ресурсов КаналСбыта: Общий итог заголовок; ТипБизнеса: Заголовок, область(34, 1, 36, 2)

      Удалить
  3. Здравствуйте. у меня такой вопрос. можно ли в отчете, для примера ваш, добавить в итоги колонки "среднее количество" и "средняя сумма"(только в итогах). просто у меня немного не получается, вот решил задать Вам вопрос.

    ОтветитьУдалить
    Ответы
    1. Привет. Добавь вычисляемые поля, путь к данным: КоличествоСреднее и СуммаСреднее, выражение соответственно: Количество и Сумма.
      В ресурсах нужно для этих полей указать выражение Среднее(...). Для новой СКД этого будет достаточно, скрин http://joxi.ru/iIxPU_3JTJAAZP-Ub94
      Если брать за основу мой отчет, для таблицы нужно дополнительно снять галку отключения вывода итогов и дополнительно настроить макеты группировок и ресурсов.

      Удалить
    2. Спасибо за ответ. но мне нужно немого другое. на скрине видно что колонка средняя участвует в основной таблице. а мне интересует это колонка только в горизонтальных итогах.

      Удалить
  4. Здравствуйте, тоже интересует данный вопрос.

    ОтветитьУдалить
    Ответы
    1. Понял. Тут два варианта: либо настраивать дополнительно макет, либо настроить СКД. Во втором случае в группировке колонок для контрагента указать конкретные поля для вывода (http://joxi.ru/O7RPU_3JTJBTWQnwFq4), и добавить еще одну группировку (http://joxi.ru/erRPU_3JTJBmWJYoxtA).В этом случае получится такой отчет http://joxi.ru/nLRPU_3JTJCpaD_OrbI.

      Удалить
    2. Спасибо. у меня теперь другой вопрос.. вот у вас в Итогах.. вверху остались пустые ячейки. их как нибудь можно бурать или объединить чтобы все вместе было?

      Удалить
    3. Только через создание собственного макета.

      Удалить
  5. Добрый день! Помогите настроить макет СКД. Вот так выглядит отчет сейчас http://clip2net.com/s/jb0dIQ Необходимо добавить туда группировку по номенклатуре (чтобы перед детальными записями появилась строчка с итогами). Как нужно настроить макет? Сейчас при попытке что-то изменить, добавить группировку Номенклатура у меня выходит сообщение об ошибке: "Поле "Размер" не может быть использовано в группировке "Номенклатура"". Заранее спасибо!

    ОтветитьУдалить
    Ответы
    1. Добрый. Полагаю, что поле компоновки "Размер" так же является реквизитом номенклатуры. Попробуйте в группировку по номенклатуре вынести Размер как реквизит номенклатуры. То есть вместо "Номенклатура, Размер" должно быть "Номенклатура, Номенклатура.Размер".

      Удалить
  6. А как сделать шаблон для детальных записей? Причем нужно объединить несколько полей в одно: [ВидДокумента] №[НомерДок] от [ДатаДок]. Если я делаю шаблон для поля, то потом эти поля ВидДокумента,НомерДок,ДатаДок все равно добавляются в отчет уже отдельными колонками. Как от них избавится?

    ОтветитьУдалить
    Ответы
    1. Вы можете задать имя группировки для детальных записей, потом так же выбрать эту именованную группировку в настройках макета. с другой стороны, можно воспользоваться настройками выражения представления для ссылки документа, например так: Строка(ВидДокумента) + " № " + Строка(НомерДок) + " от " + Строка(ДатаДок)

      Удалить
  7. Этот комментарий был удален автором.

    ОтветитьУдалить
  8. Здравствуйте. Очень нужна помощь. Создала отчет на СКД. Макет предоставлен пользователем. Без применения макета СКД выводит все данные как нужно. Как только начинаю применять макет - начинаются глюки. До таблицы данные выводятся, после таблицы (начиная с макета итогов по таблице) не выводятся. Настройки оформления все по-умолчанию, ничего не меняла. Ткните в меня ошибкой. Спасибо. https://yadi.sk/i/jO6VsagTr7H5R https://yadi.sk/i/FRB8WLaur7H5b https://yadi.sk/i/vqjLJJIAr7H6E https://yadi.sk/d/a6I2TbLwr7H5w Отчет работает на ЗиК ГУ 3.0

    ОтветитьУдалить
    Ответы
    1. Как то так, https://yadi.sk/d/MlSs9OG2r845x
      напутали немного с макетами заголовков группировок и макетами группировок, а так же отсутствовали поля для расчета итогов.

      Удалить
    2. Спасибо большое. Я еще раз перечитаю главу про эти виды макетов, чтобы окончательно разобраться. Еще я видела, что вам выше задавали аналогичный вопрос, но у меня почему-то не открылись картинки ваших ответов. Поэтому переспрошу: мне нужно посчитать среднемесячный и среднечасовой заработок исходя из итоговых сумм (в макете под таблицей). Я попробовала агрегатные функции, но они дают некорректный результат. Если не сложно, подскажите. И еще: без макета главного бухгалтера выбирает, а в макете не показывает. В чем ошибка? Спасибо за вашу помощь

      Удалить
    3. Со средним сама разобралась. Осталось понять куда делся бухгалтер

      Удалить
    4. И с бухгалтером разобралась. Правда, не поняла, почему то, что можно вывести в шапке группировки нельзя вывести в подвале... Но если сделать еще одну группировку под деталями и назначить ей макет, то работает.
      Вам спасибо за помощь, хорошая подсказка, натолкнули меня на правильные мысли

      Удалить
  9. Добрый день! Подскажите, пожалуйста, можно ли в СКД вывести все строки справочника, даже с пустыми суммами? Например кроме контрагентов с проводками, всех контрагентов из имеющегося справочника. Спасибо.

    ОтветитьУдалить
    Ответы
    1. День добрый, можно. В ваш запрос необходимо добавить справочник контрагентов и левым соединением связать с данными проводок. Либо добавить в схему компоновки новый набор данных с запросом по справочнику контрагентов и на вкладке связей наборов настроить соединение этого набора, как источника связи, с набором данных по проводкам. В контексте СКД второй вариант предпочтителен.

      Удалить
  10. Доброе время суток,

    Мне нужно применить форматирование для Итогов по колонкам.
    Сделал так как вы демонстрировали, но результат отрицательный.
    Подскажите пожалуйста, что не правильно сделал ?

    https://drive.google.com/drive/folders/0BxU-cKDP-uXGcWxpYUcxNHRGQXM

    ОтветитьУдалить
    Ответы
    1. Привет. Лучше выложить всю схему или отчет.

      Удалить