Скд не выводить пустые группировки

378 пользователя считают данную страницу полезной. Информация актуальна! Страница была обновлена 16.12.2019

В этой статье я расскажу про закладку «Другие настройки» в 1С СКД. Рассмотрим все параметры кроме тех, которые относятся к диаграмме.

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

  • Отчета в целом
  • Для таблицы
  • Для группировки (строк или колонок)

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

Итак, рассмотрим параметры по-порядку:

Макет оформления

Макет оформления отвечает за визуальное оформление структуры отчета. Если коротко, макет оформления это предустановленный набор правил оформления различных областей отчета – заголовков полей, ресурсов, итогов и т.д. Все что связано оформлением – цвет, шрифт, рамки и т.д. В этом параметре вы можете выбрать или типовой набор или свой собственный. Если этот параметр не установлен, используется «Основной» макет оформления. Есть возможность не использовать макет оформления вообще. Для этого нужно выбрать вариант «Без оформления» и тогда никакое оформление к ячейке табличного документа применяться не будет.

Количество записей

Параметр доступен только для группировок. В том числе для группировок строк и колонок таблицы. Если параметр задан, то выводятся не все записи группировки, а только указанное количество

Процент записей

Параметр доступен только для группировок. В том числе для группировок строк и колонок таблицы. Если параметр задан, то выводятся не все записи группировки, а только указанный процент от общего количества

Тип макета

Параметр доступен только для группировки. Не доступен для группировок строк и колонок таблицы. Отвечает за направление вывода ячеек записи группировки.

  • Авто. Работает как горизонтально
  • Горизонтально. Ячейки записи выводятся горизонтально
  • Вертикально. Ячейки записи выводятся вертикально

Расположение итогов

Данный параметр имеет отношение к группировке. Чтобы понять смысл работы этого параметра нужно представить запись по группировке как итог по подчиненным группировкам (даже в том случае если подчиненных нет). Варианты значения параметра:

  • Нет. Отключает вывод значений ресурсов.
  • Начало. В начале выводится одна группировочная запись (для подчиненных)
  • Начало и Конец. К группировочной записи в начале добавляется ее копия, но уже после всех записей подчиненных группировок (то есть в конце)
  • Конец. Отключает вывод значений ресурсов в начальной записи. Но сама начальная запись добавляется
  • Авто. Работает как «Начало»

Расположение полей группировок

Интересный параметр, который влияет на расположение подчиненной группировки относительно родительской. Причем действует этот параметр на группировки строк(или просто группировки без таблицы) и группировки по колонок по-разному.

Для группировок строк:

  • Вместе. Работает как значение по умолчанию. Дочерняя группировка выводится под родительской группировкой в одной колонке
  • Отдельно. Дочерняя группировка выводится в отдельной колонке. Значение родительских группировок дублируются для подчиненной.
  • Отдельно и только в итогах. Дочерняя группировка выводится в отдельной колонке. Значение родительских группировок не дублируется для подчиненной

Для группировок колонок установка параметра работает похоже, но немного по другому. Если для группировок строк достаточно установить значение параметра для верхней группировки (или для отчета), то это значение распространяется на остальные подчиненные группировки. Для колонок этот принцип не работает. Не работает если установить параметр для отчета, для таблицы, для группировки первого уровня. Работает установка параметра начиная со второй (по вложенности) группировки. При этом значение параметра на следующие группировки не передается. И действует это значение не на подчиненную группировку, а на текущую. То есть :

  • Вместе. Колонка текущей группировки выводится в той же строке что и родительская
  • Отдельно. Колонка текущей группировки выводится на новой строке. Значение родительских группировок повторяется
  • Отдельно и только в итогах. Колонка текущей группировки выводится на новой строке. Значение родительских группировок не повторяется.

Расположение группировок

Параметр работает в некотором смысле аналогично параметру «Расположение итогов», но есть отличия в работе значений:

  • Нет. Полностью исключает записи данной группировки
  • Конец. В отличие от параметра «Расположение итого» такое значение на самом деле отключает вывод начальной записи

Если у группировки действуют оба параметра «Расположение группировок» и «Расположение итогов», то результат их действия объединяется через «ИЛИ».

Расположение реквизитов

Параметр отвечает за вывод реквизитов полей входящих в состав группировки. Если у вас есть группировка по какому-то полю, то чтобы вывести реквизиты объекта из этого поля вам не обязательно включать их в группировку. Достаточно добавить их в выбранные поля (развернув объект) в списке они будут отображаться через точку. За то как будут выводится такие поля отвечает этот параметр:

  • Вместе – все реквизиты выводятся в одной отдельной колонке вместе. Для каждой группировки своя отдельная колонка
  • Отдельно – каждый реквизит выводится в отдельной колонке
  • Вместе с владельцем – все реквизиты выводятся в колонке группировки. Это значение используется по умолчанию
  • В отдельной позицици – все реквизиты выводятся в отдельной колонке, но колонка в отличие от значения «Вместе» одна для всех группировок

Расположение ресурсов

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

  • Горизонтально (по умолчанию) – заголовки ресурсов выводятся в шапке (горизонтально). В строке группировки ресурсы выводятся также горизонтально
  • Вертикально – заголовки ресурсов выводятся в отдельной колонке в строках группировок (вертикально). В строке группировки ресурсы выводятся вертикально

Расположение общих итогов (по вертикали / по горизонтали)

Параметр отвечает за вывод общих итогов. Для отчета и таблицы доступны варианты «по вертикали», «по горизонтали». При этом вариант «по горизонтали» имеет смысл только для группировок колонок таблицы. Для группировок колонок доступен только один вариант – «расположение общих итогов» и означает итоги по горизонтали, соответственно для группировок строк таблицы также доступен такой же один вариант и означает он итоги по вертикали. Для группировок без таблицы хоть и доступен вариант «по горизонтали», но имеет значение только вариант «по вертикали».

  • Нет – итоги не выводятся
  • Начало – итоги выводятся в начале
  • Конец – итоги выводятся в конце (по умолчанию)
  • Начало и конец – итоги выводятся в начале и в конце
  • Авто – работает как «Конец»

Тип заголовка полей

Не совсем понятно как точно работает параметр, но в варианте «Полный» заголовок подчиненного реквизита выводится как «Владелец.Реквизит», в варианте «Краткий» выводится просто «Реквизит». Может еще на что-то влияет?

Выводить заголовок и Заголовок

Два параметра отвечают за вывод заголовка отчета, группировки, таблицы. Если параметр Выводить заголовок равен «Выводить», то выводится даже пустой заголовок. Если параметр имеет значение «Не выводить», то заголовок не выводится даже если задан. Если параметр имеет значение авто или не установлен, то заголовок выводится если заполнен и не выводится если не заполнен.

Выводить параметры

Параметр доступен только на уровне отчета. Отвечает за вывод значений параметров отчета. По умолчанию (и значение «Авто») параметры выводятся.

Выводить отбор

Параметр отвечает за вывод отбора. Доступен на уровне отчета, группировки. По умолчанию (и значение «Авто») отбор выводится

Автопозиция ресурсов

Параметр отвечает за позицию вывода ресурсов. Доступен для отчета, для таблицы, для группировок.

  • Не использовать – колонки ресурсов выводятся так, как задано в списке «Выбранные поля» при этом учитываются только поля группировок и ресурсов
  • После всех полей (по умолчанию) – колонки ресурсов выводятся после всех полей (группировок и реквизитов)

Фиксация слева и Фиксация сверху

Параметры доступны только для отчета. С помощью параметров можно отключить (по умолчанию включена) фиксацию слева (для таблиц) или сверху (и для таблиц и просто для группировок)

1с. СКД. Вычисляемое поле в группировке.
Эта методика используется:
– когда итог в группировке отчета СКД 1с требуется не просто просуммировать колонку подчиненныч строк, а вычислить значение по формуле.
– когда вам надо показать только итог в группировке, не показывая основного значения.

Делается эта фишка следующим образом:
1. В отчет СКД добавить вычисляемое поле, Выражение=0

Немного теории по функции СКД «Вычислить».
Функция Вычислить предназначена для вычисления выражения в контексте некоторой группировки. Функция имеет следующие параметры:
– Выражение – строка, содержащая вычисляемое выражение;
– Группировка – строка, содержащая имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка
– ОбщийИтог, вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем.
– Тип расчета — строка, В случае если данный параметр имеет значение ОбщийИтог, выражение будет вычисляться для всех записей группировки. В случае если значение параметра Группировка, значения будут вычисляться для текущей групповой записи группировки.

Например:
Сумма(Продажи.СуммаОборот) / Вычислить(«Сумма(Продажи.СуммаОборот)», «ОбщийИтог»)
В данном примере в результате получится отношение суммы по полю «Продажи.СуммаОборот» записи группировки к сумме того же поля во всей компоновке.
Еще пример:
ВычислитьВыражение(«Сумма(Стоимость)/Выбор Когда Сумма(Количество)=0 Тогда 1 Иначе Сумма(Количество) Конец»,»Подразделение»,»Группировка»)

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

1С СКД: Суммирование значений на различных уровнях группировок

В данной небольшой заметке хочу показать, как можно произвести суммирование значений на различных уровнях группировки, в отчете с использованием системы компоновки данными.
Как показано на изображении, только на уровне группировки «Группы номенклатуры», рассчитывается ресурс «Заказать», в нем отображается, сколько нужно заказать по текущей группе номенклатуры исходя из определенных условий:

1С СКД: Суммирование значений на различных уровнях группировок

Соответственно, теперь необходимо рассчитать итоги, по выше находящимся группировкам («Склады», «ТипыСкладов») и общий итог.
Для этого используется функция ВычислитьВыражениеСГруппировкойМассив:
ВЫЧИСЛИТЬВЫРАЖЕНИЕСГРУППИРОВКОЙМАССИВ (EVALEXPRESSIONWITHGROUPARRAY)
Синтаксис:
ВычислитьВыражениеСГруппировкойМассив( , , , )
Описание:
Функция возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет преобразовано в НаборДанных.Контрагент.
Компоновщик макета при генерации выражений для вывода пользовательского поля, в выражении которого присутствует только функцияВычислитьМассивСГруппировкойМассив(), генерирует выводимое выражение таким образом, чтобы выводимая информация была упорядочена. Например, для пользовательского поля с выражением:

ВычислитьВыражениеСГруппировкойМассив(«Сумма(СуммаОборот)», «Контрагент»)
Компоновщик макета сгенерирует для вывода следующее выражение:

Параметры:

Тип: Строка. Выражение, которое нужно вычислить. Строка, например, Сумма(СуммаОборот).

Тип: Строка. Выражения полей группировки – выражения полей группировки, перечисленные через запятую. Например, Контрагент, Партия.

Тип: Строка. Выражение, описывающее отбор, применяемый к детальным записям. В выражении не поддерживается использование агрегатных функций. Например,ПометкаУдаления = Ложь.

Максимум(ВычислитьВыражениеСГруппировкойМассив («Сумма(СуммаОборот)», «Контрагент»));

Подробное описание синтаксиса функции можно найти по адресу http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Теперь для расчета, продублируем поле «Заказать», с различными значениями «Рассчитывать по…», используя следующие выражения, обратите внимание, что в каждом выше стоящем уровне используются значения уровней ниже стоящих группировок.

В итоге получаем следующую конструкцию:

1С СКД: Суммирование значений на различных уровнях группировок

1С СКД: Суммирование значений на различных уровнях группировок : 5 комментариев

Отлично, спасибо, очень помогла статья.

Хорошая статья. Благодарю.

А у меня не получилось…выходит ошибка — Отчет не сформирован ! Функция не найдена «ЧИСЛО».

Dim Вопрос-ответ Отзывов (5) В закладки

Здравствуйте.
Есть отчет на СКД.
http://gyazo.com/b1e706b601b23a2c997d519d9ec5e157
Выводит список документов и контрагентов по этих документах. По некоторым документам контрагентов нет (пустая строка).
Так вот, нужно те строки, где заполнены контрагенты – отображать, а пустые нет.
Если это поможет, то контрагенты есть только у документов отчет комиссионера о продажах.

Пробовал это реализовать м через отбор, и через условия и выбором – но все бес толку. Выводит либо только тех ,у кого есть пустые поля, либо тех – у которых заполненные. Или же все.

Был у меня как-то клиент, разрабатывали ему конфигурацию по управлению сетью хостелов.

И вот возникла одна несложная задачка: сделать отчет, который будет показывать состояние комнат на какой-то момент времени в следующем виде:

Группировка по Хостелам и комнатам, детали: проживающий, дата заезда, планируемая дата выезда и что-то там еще по проживающим:

Комната 313 (5 мест)
Иванов Иван Перович, 01.01.2016, 31.01.2016
Пупкин Петр Васильевич, 05.01.2016, 25.01.2016
СВОБОДНО
СВОБОДНО
СВОБОДНО

Самое интересное и оказалось в том, что каждое свободное место в комнате должно выводиться отдельной строчкой.

Структура конфигурации не предполагала учет по конкретным местам и более того, нигде, кроме этого отчета и не возникала такая необходимость. Т.е. у нас есть информация о количестве мест в комнате всего и о каждом проживающим, каждый из которых занимает 1 место.

Конечно, можно было бы быстренько состряпать отдельный отчет и сделать так:

Но как только я давным давно познакомился С КД, я старался делать все отчеты с помощью компоновки. Причина в двух неоспоримых плюсах: быстрота разработки и гибкость настроек для пользователя. В 99% случаев я даже формы не создавал для отчетов, все прекрасно описывается в схеме компоновки. И псевдонимы полей, и списки значений, а если надо – можно пользоваться функциями общих модулей. В общем очень не хотел я делать шаг в прошлое, поэтому достаточно быстро в голове родился вариант решения. Томить не стану, вот оно само решение, набросал без метаданных, чтобы любой желающий смог быстро посмотреть его в консоли:
В

В принципе, данный способ можно использовать везде, где есть необходимость что-то учесть в запросе X раз, именно не умножить на X, а сделать X строк из одной.

Допустим, мы делаем отчёт по наличию номенклатуры на складах, например на «Складе 1» и «Складе 2».

В запросе мы получим результат: к примеру, для номенклатуры «Радиатор отопителя ГАЗ-21 Волга» поле «Склад 1» будет заполнено, а поле «Склад 2» останется пустым. Для остальной номенклатуры будут свои комбинации.

Настраивая будущий отчёт, разместим группировку «Склад» в колонках таблицы. При построении отчёта обнаружим, что к колонкам «Склад 1» и «Склад 2» добавилась ещё одна, пустая колонка.

Избавиться от этой пустой колонки можно следующим способом:

На вкладке «Настройка» выберем нужную группировку (Склад). Для этой группировки (именно для неё, а не для отчёта в целом) откроем вкладку «Отбор» и добавим настройку: » «. Потом на закладке «Другие настройки» (опять же, при выбранной настройке именно для группировки «Склад») сделаем такую настройку: установим в значение .

Если в других группировках отчёта тоже присутствуют пустые колонки, то для этих группировок нужно выполнить аналогичные действия.

Однако, надо иметь ввиду, что если установить такой отбор для группировки высших уровней, то при незаполненном значении отбора в отчет не попадут и группировки более низких уровней, даже если по ним есть данные.

При построении отчетов есть ряд задач, которые при решении «в лоб» часто приводят к написанию тяжелых запросов или запросам в цикле или ручному выводу данных в таблицу .

Вот примеры таких задач:

  • Получение нарастающего объема продаж по месяцам, например, для вывода в виде диаграммы
  • Расчет разницы продаж текущего и предыдущего периода – для всех строк отчета
  • Сравнение объема продаж каждого менеджера с эталонным значением, которое вычисляется в ходе формирования этого отчета
  • Получение нарастающего итога по горизонтали и вертикали в кросс-таблицах

И все эти задачи решаются элементарно с помощью функций СКД – буквально за пару минут . Без запросов в цикле и кривого кода.

Сегодня рассмотрим использование некоторых функций СКД на конкретных примерах.

Видео 1. Как получить сумму в отчете нарастающим итогом?

Подобные задачи часто встречаются на практике. Наиболее типичный пример – в отчет должны выводиться продажи по периодам, необходимо знать не только сумму продаж текущего месяца, но и нарастающим итогом с начала формирования отчета.

На самом деле эту задачу можно решить и с помощью запроса (без функций СКД), но есть 2 проблемы:

  • Сам по себе подобный запрос будет сложным – уйдет время на его разработку и отладку.
  • Такой запрос будет серьезно нагружать систему – и чем больше данных, тем медленнее он будет работать.

С помощью функций СКД эта задача решается одной строчкой кода, и отчет будет работать максимально быстро, смотрим:

Видео 2. Как получить значение из предыдущей строки отчета?

Такой функционал может быть полезен, когда необходимо отслеживать тренд определенного ресурса – происходит уменьшение или увеличение относительно предыдущего состояния, плюс должна рассчитываться дельта.

Приведем несколько примеров, когда это может быть полезно:

  • Анализ дебиторской задолженности по дням – вычисляем тренд и абсолютное увеличение или уменьшение задолженности относительно прошлого периода
  • Анализ курсов валют и оценка прибыли или убытков от курсовой разницы – нужно получить дельту между текущим и предыдущим курсом и умножить на остаток денежных средств в валюте.

Такие задачи также трудоемко решить с помощью запроса, а в СКД это делается одной строкой:

Видео 3. Как сравнить итог по текущей строке с эталонным значением?

Пример, когда этот функционал может быть полезен:

  • В системе ведется учет продаж менеджерами
  • Руководитель отдела ведет личные продажи наряду с менеджерами
  • Требуется вывести отчет по продажам в разрезе менеджеров
  • В отчет также необходимо выводить дельту относительно объема продаж руководителя отдела.

То есть речь о том, что нужно сравнить каждую строку продаж менеджера с продажами руководителя отдела.

А эти данные могут, например, использоваться для начисления премии.

И опять же с помощью СКД эта задача решается в одну строку:

Видео 4. Получение нарастающего итога в кросс-таблице

В отчете вида кросс-таблица нарастающий итог может считаться как вертикально (по строкам), так и горизонтально (по столбцам).

Мы покажем, как с помощью одного параметра СКД управлять направлением расчета итогов:

Видео 5. Вывод табличной части в отдельной ячейке отчета

Допустим, необходимо разработать отчет, который выводит информацию о документах. При этом в отдельной ячейке должна содержаться табличная часть документа.

Чтобы решить подобную задачу с помощью обычного запроса, потребуется писать ручной вывод результата в табличный документ.

Вопрос: Кросс таблица СКД

Всем привет!
Создал отчет по продажам в виде кросс таблицы…Все работает,но нужно колонку с кодом номенклатуры вывести отдельно.Если Просто добавить в колонки группировки номенклатура.код,то скд начнет группировать по кодам,что не есть правильно.Так вот мой вопрос-можно ли все-таки как-то коды вынести отдельной колонкой?

Ответ: Dethmontt , Спасибо,уже сделал через ячейку произвольного макета скд

Добавлено через 1 минуту

Сообщение от Xomych

Мне проще свой отчет нарисовать

Ну это кому как-мне не проще)

Вопрос: Сложные кросс — таблицы в 1с.

Всем здравствуйте! Необходимо разработать следующий отчет такого вида на 1с Предприятие 8.3:

Пытался на СКД сделать — получилось. Пытался сделать через заполнение областей макетов — тоже не вышло. Столбцы образуются динамически в зависимости от периода отчета. числа от 00 до 23 — это часы. Синие квадратики — промежутки между часами. Пытался сделать через такой макет:

Но результат некорректен. Прошу помочь. Кто то сталкивался с таким? У кого есть идеи? Спасибо!

Ответ:

Операция заполнения в случае динамического формирования происходит в два этапа. 1) Сначала нужно определить количество колонок, в зависимости от условий и отборов при начале формирования отчета. И на основании этого сформировать шапку документа. 2) Заполнить уже параметрами детальные записи.

Вопрос: СКД и различные произвольные периоды в кросс-таблице

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

Задача такова:
1. Есть отчет на СКД с какими-то суммовыми показатели, есть какие-то группировки.
2. Есть таблица значений «периоды» с началом и окончанием периодов, которую пользователь заполняет произвольно.
3. Нужно сделать так, чтобы эти строки из ТЗ «Периоды» стали доступны как поля в СКД, чтобы по ним можно было выводить колонки с суммовыми показателями.

Какие могут быть решения? Я пока вижу только два:
1. Программно менять текст запроса, используя ПОЛНОЕ СОЕДИНЕНИЕ для каждого периода.
2. Выгрузить таблицу периодов во временную таблицу, и потом ее уже соединять с таблицами существующим запросом, чтобы можно было сделать группировки по произвольным периодам.

Что делать, чтобы работало быстрее и меньше было бы кода?

Ответ: () Плохо знаю СКД. Для данного решения надо два макета схемы КД и потом в модуле обработки переназначить отборы и периоды? А зачем вторая схема КД, если все это можно наложить на первую?

Вопрос: Вопросы по СКД (кросс-таблица)

Доброго времени суток!

Есть таблица, в строках которой две группировки (измерения регистра накопления) и в колонках три: месяц, неделя, день (периоды регистра накопления). Источник — обороты регистра накопления. Вроде бы все просто, но при выводе отчета колонки выводятся в последовательности итоги по месяцу, итоги по неделе, дни, итоги по неделе и т.д. А хотелось бы наоборот, дни, итоги по неделе, дни… итоги по месяцу. В таком виде отчет более удобочитаем. Если в Других настройка отчета установить расположение итогов в конце, то появляются пустые столбцы на месте месяцев и неделей, а итоги уходят туда куда нужно. Это во-первых. Во-вторых, хотелось бы раскрасить колонки таблицы у определенных группировок, а раскрашиваются только заголовки. Заранее благодарен.

Ответ: () Неделя Равно НачалоПериода(Неделя, Неделя)

Вопрос: Оформление общих итогов крос таблицы СКД

Есть отчет кросс таблица в строках неделя — день в колонках несколько независимых группировок. Плановые данные, Плановые тех. операции, выпущено, тех. операции выпучка. выполнение плана

Предопределенный макет. Все области настроил. Не получается ни как оформить подвал.

На одной картинке как пример отчет в интернете нашел сделал в нем область подвала выделяется. В моем отчете ни как.

В примере область ресурса Строка — Общий итого заголовок, колонка — Заголовок и все нормально область выделена цветом.

В моем отчете ни как. Помогите?

Ответ: неделя плановые фактические день показатели показатели макет группировки «неделя» общий итог заголовок итого переименовал как надо дальше я делаю макет ресурсов
неделя — общий итог заголовок плановые показатели — заголовок и ни чего не происходит.

Вопрос: Как ускорить создание макетов сложных печатных форм?

Мне тут попалась шабашка по созданию и заполнению сложных печатных форм для частных предпринимателей Украины. Никакие официальные программы эти формы не поддерживают. Оригиналы макетов представлены только в ворде, иногда в pdf, один раз было в экселе, но этим макетом воспользоваться не удалось, так он был сделан через одно место.

В конце концов, я эти формы (около десятка) сделал вручную в 1С, в «семерке» (можно было в «восьмерке», но вынужден был привязываться к конфигурации клиента). В принципе, если рука набита, то за день подобный макет вполне реально сделать. Однако возникли некоторые вопросы по эффективности работы.

Просто тупо лепить макеты довольно скучновано и утомительно. Пробовал ваять в экселе, а потом конвертировать в моксел. Работать можно, но особого прироста производительности не было. Потом формировал макеты в «восьмерке» и сохранял в формате «семерки». Табличный редактор в 1С8х помощнее будет, чем в 1С77, но не всегда полученные файлы открываются в «семерке», есть риск проделать работу зря.

Изучая данный вопрос, открыл для себя процессор FOP, который на базе двух xml-файлов (один файл с данными, другой с xsl:fo разметкой печатного макета) формирует нужный отчет в форматах pdf, rtf и некоторых других. Есть там и превьюер, так, что он вполне может служить альтернативой системе печати в 1С.

Сравнивание двух систем построения макетов печатных форм (в графическом виде – в 1С и в текстовом виде – в FOP) навеяло мысль, что они принципиально отличаются между собой как табличная и блочная верстки в веб-дизайне. В Интернете до сих пор ведутся ожесточенные споры между адептами двух систем верстки.

Потенциальное преимущество текста (хотя «блочность» определяет не текст а сама парадигма ФОП) перед графикой кроется в повышении производительности. Например, если вам нужно набрать пару формул для диплома, то удобно воспользоваться вордом с Microsoft Equation, ну а если нужно сверстать большую статью или книгу со сложной математикой, то гораздо удобней применить TeX (или MathType, тот же TeX, только в ворде). Конечно, формулы набирать в текстовом виде поначалу непривычно, однако тыкание мышкой очень часто проигрывает клавиатурному набору.

Тоже самое и при построении макетов в текстовом виде (в xml-разметке xsl:fo). Поначалу сложно, зато интересно и потенциально более эффективно. Заметим, что в тексте можно набирать и сериализованные xml-файлы для файлов моксел, но принцип «табличности» или «блочности» это не меняет.

Другая возможная выгода, это способность использования чужих макетов. Не знаю как в России, но в Украине, есть программы OPZ (на базе hta) и Medoc (на Net Framework) с сотнями, если не тысячами макетов печатных форм в формате FOP (правда относительно доступными в первой программе и практически недоступными (зашифрованными) во второй). Эти программы также используют экранные формы для ввода и редактирования данных, что с одной стороны удобно, а с другой бестолково, в силу убогой реализации, хотя Медок уже под пару гигабайт будет.

Поэтому логично данные хранить в 1С. Там экранные формы тоже можно делать на базе того же моксела, хотя этот вариант мне кажется не слишком оптимальным (в смысле трудоемкости создания этих форм). Однако вводить очень разнородные данные, различные для разных отчетов в 1С тоже не слишком удобно. В данной шабашке я выкрутился созданием псевдоленточных форм списков данных, которые генерю автоматически для каждого отчета.

Другими словами нужно строить дерево данных, на основании которых будут сформированы xml-данные. Для этого удобно применять ленточные формы списков (как в окнах свойств) с возможностью редактирования независимых таблиц для выбранных элементов. Пока это можно только пытаться имитировать в 1С. Как вариант – использовать экранные формы. Но таковых в FOP»е нет, а рисовать их в 1С муторно. Конвертация блочной верстки ФОП в табличную 1С (xml-сериализация для mxl-файлов) и обратно – весьма нетривиальна задача. Оставаться в парадигме OPZ (Hta + JavaScript + Fop) не очень интересно из-за отсутствия нормального движка базы данных и не слишком удобных экранных форм (может быть просто плохо спроектированных?).

В общем, хочется сделать аналог OPZ, но на базе 1С. Кстати, может кто знает, используется ли FOP в российских отчетных системах?

Интересно выслушать мнения в развитие этой темы.

P.S. Кажется я понял, почему оригиналы макетов любят предоставлять в ворде, а не в экселе. Эксел это типичный табличный процессор, а ворд – блочный. В блочном процессоре (также в отчетах акцесса) сложные формы делать проще, чем в табличном. Для примера можно рассмотреть форму средней сложности «Форма2НДФЛс2015» из «1С:ERP Управление предприятием 2». Обратите внимание на колонки и строки разной ширины. В блочной верстке (в ФОП’е) об этом можно не беспокоиться.

Ответ:

ФОП – штука хорошая, только немного сложноватая при первоначальном изучении. Тем более что информации на русском очень мало, в основном для старых версий. Но старые версии не поддерживают rtf, только pdf. Далее, насчет верстки печатных макетов. Здесь полная аналогия с интернет вёрсткой. Хороший шаблон получается при ручном наборе. Использование различных графических средств возможно, но качество кода будет менее прозрачным, да и особых преимуществ перед тем же табличным редактором 1С или там редактированием макетов в акцессе, не будет. Я вот думаю, может быть написать некоторые скрипты, чтобы облегчить себе создание печатных макетов для ФОП»а.

Второй вариант это xml-сериализация mxl-файлов. Там структура данных будет не сложнее фоповского формата xsl:fo. Есть некоторые нюансы, но разобраться можно будет. Эти файлы тоже можно пробовать формировать вручную или с помощью собственных скриптов, затем конвертировать их стандартными средствами 1С в формат моксел.

Разница здесь только в способе организации данных: с помощью таблиц или с помощью блоков (div аналог в html-верстке).

Лично я пока еще в раздумьях.

Вопрос: СКД не корректно выводит суммы в кросс-таблице

(Конфигурация не стандартная, от поставщиков оборудования)
Для целей отладки сделал отчет на простом запросе:

ВЫБРАТЬ ЗаказТесты.ДатаОдобрения КАК ДатаОдобрения, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказТесты.Услуга) КАК Количество, ЗаказТесты.Услуга КАК Услуга, ЗаказТесты.Ссылка.Контрагент, ЗаказТесты.Ссылка.ОтделениеКонтрагента ПОМЕСТИТЬ ВТ ИЗ Документ.Заказ.Тесты КАК ЗаказТесты ГДЕ
ЗаказТесты.ДатаОдобрения МЕЖДУ &НачалоПериода И &ОкончаниеПериода

В качестве строк указал поле Услуга, в качестве столбцов поля Контрагент и ОтделениеКонтрагента.

Поле Количество сделал доступным, его же указал как ресурс с выражением Сумма(Количество)

Три дня ломаю голову, как в детальных записях увидеть реальные суммы вместо единиц, но пока что ни к чему не пришел.

Список Кросс-таблица в 1С: Бухгалтерия

Отчет предназначен для получения списков и кросс-таблиц.

Кросс-таблица представляет собой отчет с группировкой данных в строках и в колонках. Отчет может быть построен для любого регистра накопления, присутствующего в конфигурации.
Благодаря этой возможности, отчет может быть использован, в том числе для регистров накопления, изначально отсутствующих в конфигурации. Кроме того, он используется другими отчетами конфигурации как универсальный механизм построения списков и кросс-таблиц.

Настройка отчета
В поле «Раздел учета» может быть выбран любой регистр накопления, существующий в конфигурации. При выборе раздела учета выполняется начальная настройка отчета, которая может быть скорректирована в форме настройки, открываемой по кнопке «Настройка».
По кнопке «Сформировать» выполняется построение отчета в соответствии с текущей настройкой.
Кнопка «Отбор» разворачивает панель, на которой может быть настроен отбор данных, выводимых в отчет. Кроме того, отбор может быть настроен на закладке «Отбор» формы настройки.

Кнопка «Заголовок» позволяет получить более компактный вид отчета, скрывая его заголовок.
Кнопки сохранения и восстановления значений позволяют сохранять пользовательские настройки отчета, чтобы использовать их в дальнейшем.
Форма настройки отчета (открываемая по кнопке «Настройка») позволяет задавать все возможные параметры отчета, в т.ч. и те, которые задаются на главной форме.
Форма содержит следующие закладки:
Общие. Можно задать период отчета, выбрать раздел учета, другие общие параметры:
«Использовать свойства и категории» — после установки флажка появляется возможность отбирать и группировать данные по свойствам, отбирать по категориям объектов.
«Раскрашивать группировки» — группировки отчета будут выделены разными цветами.
«Показатели». Числовые значения, суммируемые в отчете. В отчет будут выведены отмеченные в списке показатели.
«Выводить в разных колонках» — с установленным флажком каждый показатель будет выведен в отдельной колонке, если флажок снят, показатели выводятся один под другим.
Группировки. На закладке можно настроить группировку данных (детализацию) отчета . Каждая строка списка группировок определяет поле группировки и тип итогов.

Тип итогов определяет, нужно ли добавлять в отчет дополнительные группировки по иерархии для полей, являющихся элементами справочника или плана видов характеристик. В данном отчете можно настроить группировки строк и группировки колонок. (Отчет с группировками колонок называется кросс-таблицей. Строки группировок будут содержать итоговые значения выбранных показателей.

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

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

Значение или значения для сравнения . Для условий отбора на вхождение в интервал задается двумя значениями – границами интервала. Если накладывается условие на вхождение в список, значения сравнения задаются списком значений.
Сортировка. Определяет порядок, в котором будут выведены строки отчета. В каждой строке задается поле и порядок сортировки. Если сортировка не задана, то используется автоматическое упорядочивание (строки символов – по алфавиту, числа – по возрастанию и т.д.). В качестве полей упорядочивания могут быть выбраны поля показателей, что позволяет отсортировать строки отчета по убыванию или возрастанию показателя.

(0)

Обзор интерфейса программы «1С:Предприятие 8.1»
Обзор стандартного интерфейса 1:01 3 65808
Главное меню ч.1 1:14 0 31705
Главное меню ч.2 1:14 0 17844
Главное меню ч. 3 0:52 0 13193
Панель инструментов 0:58 0 14056
Настройка панель инструментов 1:29 0 14533
Параметры программы 1:15 0 12089
Панель функций 1:05 2 14825
Заполнение первичных параметров
Стартовый помощник 1:03 0 20904
Справочник «Банки» 0:58 0 14108
Справочник «Валюты» 1:59 0 10206
Справочник «Контрагенты» 1:26 0 15295
Справочник «Номенклатура» 0:55 0 15186
Справочник «Номенклатурные группы» 1:21 0 11422
Справочник «Основные средства» 1:44 0 14209
Справочник «Нематериальные активы и расходы на НИОКР… 1:53 0 6663
Справочник «Способы отражения расходов по амортизаци… 1:41 0 17880
Справочник «Статьи затрат» 1:16 0 16574
Справочник «Типовые операции». Часть 1 1:35 0 10790
Справочник «Типовые операции». Часть 2 1:38 0 8351
Справочник «Типы цен номенклатуры» 1:35 0 7916
Отчеты
Общие принципы 1:23 0 11232
Оборотно-сальдовая ведомость (бух) 2:43 0 19232
Шахматная ведомость 1:20 0 8577
Оборотно-сальдовая ведомость по счету (бух) 1:58 0 24780
Обороты счета (бух) 2:18 0 6807
Анализ счета (бух) 3:05 0 10560
Карточка счета 1:54 0 16727
Анализ субконто (бух) 2:42 0 11446
Список/Кросс-таблица 4:24 0 5638
Остатки и обороты 4:56 0 5563
Анализ состояния бухгалтерского счета 3:09 0 5520
Главная книга 2:14 0 13273
«Налоговая декларация…» 1:43 0 6202
Анализ расходов на оплату труда 1:01 0 9107

Отчет предназначен для получения списков и кросс-таблиц.

Кросс-таблица представляет собой отчет с группировкой данных в строках и в колонках. Отчет может быть построен для любого регистра накопления, присутствующего в конфигурации.

Благодаря этой возможности, отчет может быть использован в том числе для регистров накопления, изначально отсутствующих в конфигурации. Кроме того, он используется другими отчетами конфигурации как универсальный механизм построения списков и кросс-таблиц.

Настройка отчета

В поле «Раздел учета» может быть выбран любой регистр накопления, существующий в конфигурации. При выборе раздела учета выполняется начальная настройка отчета, которая может быть скорректирована в форме настройки, открываемой по кнопке «Настройка» .

По кнопке «Сформировать» выполняется построение отчета в соответствии с текущей настройкой.

Кнопка «Отбор» разворачивает панель, на которой может быть настроен отбор данных, выводимых в отчет. Кроме того, отбор может быть настроен на закладке «Отбор» формы настройки.

Кнопка «Заголовок» позволяет получить более компактный вид отчета, скрывая его заголовок.

Кнопки сохранения и восстановления значений позволяют сохранять пользовательские настройки отчета, чтобы использовать их в дальнейшем.
Форма настройки отчета (открываемая по кнопке «Настройка») позволяет задавать все возможные параметры отчета, в т.ч. и те, которые задаются на главной форме.

Форма содержит следующие закладки:

Общие

Можно задать период отчета, выбрать раздел учета, другие общие параметры:

    «Использовать свойства и категории» — после установки флажка появляется возможность отбирать и группировать данные по свойствам, отбирать по категориям объектов.

    «

    Раскрашивать группировки» — группировки отчета будут выделены разными цветами.

    «

    Показатели» . Числовые значения, суммируемые в отчете. В отчет будут выведены отмеченные в списке показатели.

    «

    Выводить в разных колонках» — с установленным флажком каждый показатель будет выведен в отдельной колонке, если флажок снят, показатели выводятся один под другим.

Группировки

На закладке можно настроить группировку данных (детализацию) отчета. Каждая строка списка группировок определяет поле группировки и тип итогов.

Тип итогов определяет, нужно ли добавлять в отчет дополнительные группировки по иерархии для полей, являющихся элементами справочника или плана видов характеристик. В данном отчете можно настроить группировки строк и группировки колонок. (Отчет с группировками колонок называется кросс-таблицей) Строки группировок будут содержать итоговые значения выбранных показателей.

Поля

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

Отбор

Отбор данных отчета. В каждой строке задается один элемент отбора, содержащий:

    Флажок использования элемента отбора. Позволяет легко отключать и включать отдельные элементы отбора без удаления и добавления элементов.

    Поле, на значения которого накладываются условия отбора.

    Вид сравнения – условие отбора.

    Значение или значения для сравнения. Для условий отбора на вхождение в интервал задается двумя значениями – границами интервала. Если накладывается условие на вхождение в список, значения сравнения задаются списком значений.

Сортировка

Определяет порядок, в котором будут выведены строки отчета. В каждой строке задается поле и порядок сортировки. Если сортировка не задана, то используется автоматическое упорядочивание (строки символов – по алфавиту, числа – по возрастанию и т.д.). В качестве полей упорядочивания могут быть выбраны поля показателей, что позволяет отсортировать строки отчета по убыванию или возрастанию показателя.

Заполнение отчета по регистру накопления при выборе раздела учета

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

Ресурсы регистра используются в качестве возможных показателей отчета.
По регистру накопления остатков может быть построен отчет, выводящий остатки на заданную дату.

По регистру накопления оборотов может быть построен отчет, выводящий оборот за заданный период. Оборот может быть дополнительно детализирован по годам, месяцам, неделям, дням.

На главную 1с форева.ру
На страницу «Программисту \ Разработка СКД отчетов в 1с.».
Задать в 1с программно уровень группировки отчета СКД по умолчанию.
Платформа: 8.2, 8.3
Формы: Обычные, Управляемые
Конфигурация: любая
Релиз: любой
Страница актуализирована: 06.02.2017

1с. СКД. Уровень группировки по умолчанию.
Как-то изощрялся и понадобилось мне выводить отчет СКД 1с так, чтобы группировки были свернуты до определенного уровня по умолчанию. Вот как это было сделано.
1. В Модуле объекта отчета создать типовую процедуру «ПриКомпоновкеРезультата»
2. В тело процедуры вставить код
СтандартнаяОбработка = Ложь;
КомпоновщикМакет = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакет.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
ПроцессорВывода = новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
ДокументРезультат.ПоказатьУровеньГруппировокСтрок(1);
3. В последнй строке задать уровень группировок. 0-самый верхий уровень

Добрый день. В документе ЗаказПокупателя добавил реквизит табличной части — Коментарий в табличную чассть Товары.
Изменил макет, дописал поле Коментарий и значение и под ним ячейку со значением Коментарий соответственно.
В модуле обекта, Функция ПечатьСчета(ИмяМакета) дописываю:

Запрос = Новый Запрос;
Запрос.УстановитьПараметр(«ТекущийДокумент», ЭтотОбъект.Ссылка);
Запрос.Текст =
«ВЫБРАТЬ
| НомерТЧ,
| НомерСтрокиТЧ,
| Номенклатура,
| ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) КАК Товар,
| Номенклатура.Код КАК Код,
| Номенклатура.Код КАК КодАртикул,
| Количество,
| ЕдиницаИзмерения.Представление КАК ЕдиницаЦены,
| Цена,
| Сумма,
| ПроцентСкидкиНаценки КАК Скидка,
| ХарактеристикаНоменклатуры КАК Характеристика,
| СерияНоменклатуры КАК Серия
|ИЗ
| (ВЫБРАТЬ
| 1 КАК НомерТЧ,
| МИНИМУМ(НомерСтроки) КАК НомерСтрокиТЧ,
| Номенклатура КАК Номенклатура,
| ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Цена КАК Цена,
| ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
| СерияНоменклатуры КАК СерияНоменклатуры,
| ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| СУММА(Количество) КАК Количество,
| СУММА(Сумма) КАК Сумма,
| Коментарий КАК Коментарий
| ИЗ
| Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателя
| ГДЕ
| ЗаказПокупателя.Ссылка = &ТекущийДокумент
| СГРУППИРОВАТЬ ПО
| Номенклатура,
| ЕдиницаИзмерения,
| Цена,
| ПроцентСкидкиНаценки,
| СерияНоменклатуры,
| ХарактеристикаНоменклатуры
| ) КАК ВложенныйЗапросПоТоварам
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 2,
| ЗаказПокупателя.НомерСтроки,
| ЗаказПокупателя.Содержание,
| ЗаказПокупателя.Содержание,
| Номенклатура.Код КАК Код,
| Номенклатура.Код КАК КодАртикул,
| Количество,
| ЕдиницаИзмерения.Представление КАК ЕдиницаЦены,
| Цена,
| Сумма,
| ПроцентСкидкиНаценки,
| NULL,
| NULL
|
|ИЗ
| Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателя
|
|ГДЕ
| ЗаказПокупателя.Ссылка = &ТекущийДокумент
|
|УПОРЯДОЧИТЬ ПО
| НомерТЧ, НомерСтрокиТЧ
|»;
ЗапросТовары = Запрос.Выполнить().Выгрузить();
//И ПОТОМ ВЫВОЖУ В ЦИКЛЕ
Для каждого ВыборкаСтрокТовары из ЗапросТовары Цикл
Если ОбщегоНазначения.ЗначениеНеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
Сообщить(«В одной из строк не заполнено значение номенклатуры — строка при печати пропущена.», СтатусСообщения.Важное);
Продолжить;
КонецЕсли;
ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
ОбластьМакета.Параметры.НомерСтроки = ЗапросТовары.Индекс(ВыборкаСтрокТовары) + 1;
ОбластьМакета.Параметры.Товар = СокрЛП(ВыборкаСтрокТовары.Товар) + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары);
ОбластьМакета.Параметры.Коментарий=ВыборкаСтрокТовары.Коментарий; ///////////////////////////// <— прошу обратить внимание
Если ВыводитьКоды Тогда
ОбластьМакета.Параметры.КодАртикул = ВыборкаСтрокТовары.КодАртикул;
КонецЕсли;

Скд не выводить пустые группировки

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *