Есть несколько вариантов вывода информации перед основным отчетом,какой лучше?! - зависит от задачи:
Допустим нам нужно вывести дату и время формирования отчета и свою шапку отчета, например так:
Варианты решения:
1. Использование группировки и макета заголовка:
1. Создаем в схеме новую группировку (без поля) и установим имя группировке Шапка отчета.
2. Удалим у данной группировки из выбранных полей автополе
В других настройках выберем макет оформления "Без оформления" (иначе на наш макет будет накладываться стандартный макет и вокруг всех ячеек будет рамка)
На вкладке макеты добавляем макет заголовка группировки (при добавлении указываем наше имя группировки (Шапка отчета) и указываем область с нашими данными), справа в табличном документе пишем необходимый текст и параметр
Сохраняем, формируем и видим результат как выше
2. Программное изменение текста заголовка
Код нужно установить в процедуре модуля отчета ПриКомпоновкеРезультата()
еще пример:
3. Вывод табличного макета с параметром перед формированием отчета
Создаем макет ВыводСформирован, в нем создаем параметр Сформирован и назначаем имя области Заголовок
На днях делал несколько однотипных отчетов на СКД.
Общий принцип: формируются все варианты отчета, указанные в настройках схемы и каждый вариант выводится на отдельной вкладке.
Потом возникла мысль попробовать объединить все схемы в один отчет, чтобы не плодить лишних объектов в конфигурации. При этом количество вариантов в этих схемах заранее неизвестно. Ok, challenge accepted.
В тестовой конфигурации создаю для отчета две схемы компоновки, "Склад" и "Заявки".
Запросы наборов данных приводить не буду, для каждой схемы в настройках добавляю несколько вариантов отчетов.
Теперь переходим к созданию формы. Практически все реквизиты формы будут создаваться при выборе необходимого макета отчета.
Что при разработке отчетов требуется чтобы у пользователя с ограниченными правами, отчет формировался полностью без проверки прав!
Особенно если настроен RLS
Есть несколько способов как это сделать:
1. Установить привилегированный режим в модуле отчета
Форма отчета должна быть Управляемой, далее в модуле отчета процедура обработчика «При компоновке результата»:
2. Формирование в привилегированном режиме через Общий модуль с галкой Привелигерованный
Создаем общий модуль
так же как в пункте 1 в обработчике «При компоновке результата» пишем:
В общем модуле МЕ_ДляОтчетаСКД_ПривелРежим код:
3. Если включен режим Использовать ограничение на уровне прав доступа - RLS
Часто используется в типовых. Тут в модуле для текущего пользователя можно на время формирования отчету установить параметр сеанса ИспользоватьОграниченияПравДоступаНаУровнеЗаписей в Ложь и RLS не сработает.
После завершения формирования, не забудьте включить rls обратно установив = Истина
4. Если в запросе используется конструкция вида регистратор.дата и это поле не отображается в полях отчета СКД
Допустим Вы сделали запрос по регистру накоплений и через регистратор обратились к дате или сумме документа и при формировании отчета СКД, эти поля недоступны !? как же быть?
Проблема в том - что у регистратором может выступать несколько документов и видимо права чтение/просмотр есть не на все - поэтому через скд эта таблица целиком недоступна, решение:
1. открыть доступ на все регистраторы регистра
2. в запросе четко обозначить тип
В дополнении у пункту 1, код процедуры сформировать отчет(). Для вывода отчета я использую шаблон All4CF.ru_Template_SKD_v4.1 в нем уже реализованы почти все необходимые функции и работает в Обычных и УП формах:
При формировании отчетов на СКД по умолчанию все группировки развернуты, но бывает что необходимо сразу после формирования показать отчет со свернутыми группировками!
Данный код в модуле отчета позволяет свернуть группировки до необходимого уровня (0,1,2....):
Создаем макет СКД, там произвольно или с какими-нибудь условиями выбираем в наборе данных поля табличной части, ставим условие на документ владелец, и задаем оформление. В форме документа добавляем кнопку печать, прописываем в параметрах наш документ и оп-ля - печатная форма готова
Пример использования СКД отчета для заполнения табличного документа.
Вызываем отчет “Маркетинговый план” сделаного на основе СКД.
Установка параметр “Вероятность”. И отбора по ключу “Основание.МВЗ.СПО”
Пытаюсь сделать расшифровку отчета, в карточку счета хочу поставить отбор по своей номенклатуре, но проблема в том, что, в поле отбора встает слово номенклатура и моя номенклатура по которой я хочу сделать отбор, но оно будьто бы не доступно, сама карточка формируется без участия моего отбора. В карточке в доступных полях есть номенклатура, но выгружается туда в настройки номенклатура с красным крестом, в чем может быть дело?делаю так:
В отчете должна быть настроена и указана основная схема компоновки данных
Когда идет конвертирование в ТЗ, то ищется в первом столбце пустая строка, как только она найдена - конвертация считается завершенной.
Поэтому для сложных отчетов - выводите первым столбцом Системное поле № п/п.
Делал недавно отчет с неопределенным количеством колонок. Возиться с кодом было неохота, решил сделать на СКД. С этим проблема не возникла, необходимо было натянуть результат на произвольный макет (свой заголовок + период). Покажу на примере по шагам, с чем столкнулся и как решил.
Первоначальную настройку схемы СКД описывать не буду, начнем с того, что мне надо было сделать произвольный заголовок. В нашем случае, формируем представление периода отчета.
Добавляем новый параметр "ПредставлениеПериода", тип Строка.
Теперь добавляем новое поле группировки, поля группировок не выбираем (Детальные записи), удаляем поле "Авто", переносим наш параметр.
Переходим на вкладку "Макет", рисуем шапку. Добавляем Заголовок группировки. Мы можем использовать Имя группировки, если заранее задали его в схеме компоновки, или выбрать из доступных полей. После этого определяем область в табличном документе. Далее, прописываем наш параметр на макете, потом необходимо будет установить в свойствах этой ячейки свойство "Заполнение" - "Параметр". И в окне параметров макета связать наш параметр с параметром СКД.
Теперь немного кода. Создаем форму отчета. Отключаем видимость у Основной Командной Панели и Компоновщика Настроек. Создаем нашу команду "Сформировать", реквизит формы "Дата", перетаскиваем все это на форму. Пишем код в модуле формы:
После этого, если все правильно сделали, результат отчета должен выглядеть вот так:
Теперь попробуем сделать полностью свой произвольный макет на СКД .
Здесь самое главное понять структуру областей макета в СКД. Разберем пример с неопределенным количеством колонок.
Заготовка для отчета выглядит так:
Пример результата:
Теперь создаем свой макет:
1. Добавляем шапку по аналогии с прошлым примером. Устанавливаем макет оформления "Без оформления". Итоги по номенклатуре выводить не будем, поэтому ставим у таблицы настройку "Расположение общих итогов по горизонтали" - "Нет".
2. Теперь создаем макет, прописываем параметры, настраиваем дополнительные свойства ячеек. Например, для номенклатуры можно выставить в свойстве "Размещение текста" значение "Переносить" вместо "Авто", а так же указать параметры расшифровки.
3. Теперь самое интересное, назначаем области. Структура областей будет выглядеть таким образом:
Начинаем создавать области, параметры при этом будут автоматически сопоставляться по именам. В итоге должно получиться следующее:
Проверяем отчет, должно получиться следующее:
4. Пишем код по аналогии с прошлым примером:
В итоге у нас получается следующее:
Кстати, при последующем открытии отчета, вы увидите, что компоновка перестроила макет по-своему.
В этом примере показан метод вывода в строку отчета картинки, вид которой завист от значения другого поля.
Ради примера, в отчет выведем справоник «Банки» - реквизит «Ссылка» и картинку возле этого реквизита. Вид картинки зависит от значения реквизита «ЭтоГруппа»
Создаем новый отчет - Основная схема компоновки данных:
В Вычисляемые поля добавлено поле «ПолеКартинка». В выражение добавлено значение «%Картинка%», поэтому выражению будем искать область ячеек куда необходимо вставить нашу картинку:
Почему данная возможность вызывает такой интерес? Любой человек, который программировал в 1С при этом достаточно неплохо знаком с SQL и хотя бы в общих чертах знаком с архитектурой и принципами разработки других технологических платформ для бизнес приложений с твердой уверенностью скажет вам - что ему нравится больше всего в 1С. Конечно конструктор запросов - самый удобный и продуманный механизм написания запросов для получения данных из реляционных структур, который я лично когда-либо встречал. А теперь 1С нам предоставили такую замечательную возможность использовать его не только с 1С, но и с любыми другими таблицами. Вот только в эту "бочку мёда" насыпана куча "ложек дёгтя". Обо всём по порядку:
1) Настройка и использование - без "танцев с бубном" не получится
a) Добавляете внешний источник данных - вроде ничего сложного
б) ставите галочку "Выбрать из списка" - обязательно - это нужно чтобы проверить работоспособность уже в начале и избавит от лишних заморочек
в) - обязательно нажимаем "..." - подключение именно ODBC. Не OLEDB как мы все привыкли, а на уровень ниже
г) А вот здесь будьте ОЧЕНЬ ВНИМАТЕЛЬНЫ.
Это драйвер ODBC - в случае использования клиент-серверной версии он должен обязательно быть на сервере. Если вы ведёте разработку на одной системе, а рабочая версия на другой (как это обычно бывает) убедитесь что вас не ждут сюрпризы. Странная рекоммендация, но выбирайте самый древний или самый общий драйвер в случае если вас не особо заботит скорость и за пределы возможностей стандарта SQL92 вы выходить не намерены. Это обеспечит вам лучшую совместимость. Например для SQL Server 2008 лучшим драйвером будет SQL Server Native Client 11, но рекоммендую выбирать просто SQL Server, иначе этот самый native client придётся устанавливать либо на сервер, либо на все клиентские машины (в случае использования файловой версии), а выигрыша особого для простых задач он не даст.
д) Стандартные диалоги выбора Сервера
и БД
е) На вопрос сохранения пароля рекомендую ответить "да", иначе так и не получится это дело запустить.
ж) Выбираете таблицу и реквизиты... замечательная возможность - её можно сразу же переименовать так как вам нравится (и реквизиты тоже), при этом в свойствах у вас будут отображаться названия полей источника данных
з) А теперь запускаете, открываете конструктор запросов - выбираете тупо все записи из таблицы и ОПА - ошибка. Что делать? Если у вас управляемый интерфейс - заглянуть в меню сервис, а если обычный...
Я лично использовал вот такой код:
Может каких-то кусков и не нужно, но это работает.
Выполнить код нужно ОДИН РАЗ. После чего будет нормально подключаться... мистика конечно - зачем это было нужно не понятно...
2) Источники данных только для чтения - Да, чудес не бывает... но иногда так хочется....
3) НЕЛЬЗЯ ИХ ИСПОЛЬЗОВАТЬ ВМЕСТЕ С ВНУТРЕННИМИ ИСТОЧНИКАМИ ДАННЫХ
Меня лично этот факт убил наповал
Как же так.... то чего так ждали и уже представляли и облизывались как мы сейчас в одном запросе соединим наши данные с 1С-кой свернём - сгруппируем, вставим в отчет, а не тут то было...
Но естественно опытных людей это не останавливает... какая мысль пришла в голову? Правильно - временные таблицы:
4) НЕЛЬЗЯ ИХ ИСПОЛЬЗОВАТЬ ВМЕСТЕ С ВРЕМЕННЫМИ ТАБЛИЦАМИ
А вот это уже не похоже на технологические трудности, а очень смахивает на то что нам хотят "чтобы жизнь раем не казалась" сделать .
5) Можно использовать только в соединениях СКД
Для тех кто не знает - это в СКД на вкладке "Связи наборов данных". Часто вы ими пользуетесь? Удобно? Видимо так нас хотят принудить к использованию их чаще. Вот только там есть колонка "Условие связи" и "Параметр связи". Ни в одной типовой конфигурации не нашел примера их использования, в документации и у Хрусталевой тоже как-то всё не прозрачно. Кто-нибудь сможет мне объяснить как работает "условие связи". Если там написать РеквизитИсточника = РевизитПриемника это не работает. Конечно условие можно записать в поле "Выражение" - в большинстве случаев этого хватает... вот только как-то не очень просто получается.
Итого ранее эта задача решалась где-то так:
Собственно строчек кода не много и они достаточно стандартны... при этом можно пользоваться полным функционалом конструктора запросов, а в СКД отдать только функцию КОМПАНОВКИ ДАННЫХ
Но на вид чуть конечно не так красиво... да и выгрузка в таблицу значений каждый раз нужно код писать и проверять не ошибся ли в названии реквизитов... а то что нам дали в 1С выглядит как-то половинчато. Я ещё не определился чем удобнее пользоваться. Вы решайте, и пишите о ваших решениях, и что вас к ним подтолкнуло.
Автор: Олег Филиппов