1с вывести поле запроса в подвал скд

Обновлено: 18.04.2024

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

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

2. Доработка отчета "Ведомость расчетов с клиентами"

Отработаем следующий кейс: директор требует в типовой отчет ERP «Ведомость расчетов с клиентами» добавить дополнительное поле, которое явно бы указывало, кто должник: мы или партнер. Директор – человек занятой и во все эти цифры вникать времени не имеет. Задачу поставили руководителю отдела продаж. Штатного программиста в организации нет, доступа в конфигуратор также нет, платные работы директор не согласует, а результат нужен через час.

Рис. 1 Пользовательское поле в отчете "Ведомость расчетов с клиентами"

На самом деле уложиться в срок вполне реально. Приступаем.

Проваливаемся в «Продвинутые настройки отчета»

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

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

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

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

Рис. 3 Изменение варианта отчета "Ведомость расчета с клиентами"

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

В заголовке поля можно использовать пробелы. Добавляем отбор, проваливаемся в выражение.

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



Рис. 4 Сравнение полей в отчете "Ведомость расчетов с клиентами"

В значении выбираем "Наш долг". Отбор готов – завершаем редактирование условия.



Рис. 5 Завершение редактирования пользовательского поля в отчете

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



Рис. 6 Редактирование пользовательского поля в 1С

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

Рис. 7 Редактирование пользовательского поля СКД

Пользовательское поле в СКД готово, нажимаем «Ок».



Рис. 8 Пользовательского поле в СКД готово

Теперь пользовательское поле в 1С СКД появилось в доступных полях, выводим его в отчет.



Рис. 9 Выводим пользовательское поле в отчет

Сохраним полученный вариант.



Рис. 10 Ведомость расчетов с клиентами с пользовательским полем

В название варианта добавим информацию об особенностях отчета и откроем доступность всем пользователям.



Рис. 11 Открытие доступа пользовательского поля в отчете всем пользователям



Рис. 12 Новая версия Ведомости расчетов с клиентами

Директор остался доволен, наградил выходным 31 декабря, но, как это часто бывает, главный бухгалтер Марья Ивановна была свидетелем Вашего триумфа и нам прилетает новый кейс.

3. Доработка поля "Валюта"

Необходимо в поле валюта добавить код этой валюты в скобочках. Валют много, с кодами им работать удобнее, а скобочки – это красиво.

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



Рис. 13 Редактирование поля "Валюта"

Рис. 14 Результат редактирования поля "Валюта"

Сдаем главбуху, но Марья Ивановна непреклонна. Без скобочек – некрасиво, запятую – убрать, и пусть написано будет по-русски. Переделать!

Вариант решения мы нашли, это – пользовательское поле в СКД. Начинаем с размышлений, какой вариант пользовательского поля в отчете взять? Тут мы ничего не сравниваем, и нам потребуется написать выражение, которые не умеет поле "Выбор", поэтому используем поле "Выражение".

Наберем следующее выражение:

[Валюта.Наименование валюты] + " ( " + [Валюта.Цифровой код] + " ) "

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

На ранних релизах платформы система не может перевести код валюты в строку и потребуется дополнить выражение командой СТРОКА — вот так :

[Валюта.Наименование валюты] + " ( " + СТРОКА([Валюта.Цифровой код]) + " ) "

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



Рис. 15 Редактирование пользовательского поля "Выражение"

Поле мы создали и можем его вставить в группировку, получив такой результат:

Рис. 16 Результат редактирования пользовательского поля в СКД

Но нам же нужно подменить валюту на наше самописное поле.

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

Надежнее не заменять ссылку на "Валюту", а заменить ее представление. Я не зря упомянул функционал выражения-представления из конфигуратора. Фактически, в нашем кейсе мы движемся тем же путем. У нас есть ссылка – "Валюта", мы создали её представление –"Наименование валюты для бухгалтерии", осталось уговорить программу отображать данное представление валюты в отчете.

Для этого воспользуемся закладкой "Условное оформление". Найдите там параметр "Текст". Проваливаемся, выбираем "Поле компоновки данных", находим наше пользовательское поле для бухгалтерии.

Рис. 17 Поле компоновки данных

Картинка получилась такая

Рис. 18 Результат замены поля "Валюта"

Переходим на закладку "Оформляемые поля" и указываем, что данное представление мы задали для поля "Валюта".

Рис. 19 Представление для поля "Валюта"

Завершаем редактирование. Проверяем отчет, сохраняем вариант.



Рис. 20 Конечный результат в отчете "Ведомость расчетов с клиентами"

Специалист компании «Кодерлайн»

Вас могут заинтересовать следующие статьи:

94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) --> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) -->

Вас могут заинтересовать следующие вебинары:

Наиболее сложным в применении макетов является заполнение колонки “Макет” на вкладке “Макеты” в конструкторе СКД.


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

Эксперименты я проводил над отчетом следующего вида.


Макет поля

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



Макет заголовка группировки

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



Если его назначить для самой верхней группировки, то он применится для всей шапки таблицы отчета. Как видно на рисунке, заголовки остальных группировок, а также заголовки ресурсов при этом скрываются. Поэтому приходится эти заголовки дорисовывать вручную. Иногда это и требуется, например для объединения ячеек в шапке




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



Однако если назначить строке макета высоту 1, то можно скрыть заголовки группировок текущего и следующего уровней. На рисунке ниже скрыты заголовки Должность и Сотрудник


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



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



Макет группировки

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

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



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



Или, если дорисовать столбцы, то получится так


Если возникает задача изменить подвал с итогами, то нужно использовать этот макет с типом Общий итог подвал или Общий итог заголовок. Насколько я понял, эти два типа макета делают одно и то же



Макет ресурсов

Макет используется только для ТАБЛИЦЫ. Он применяется на пересечении группировок, указанных в настройках




Ограничения использования макетов

  1. Во многих случаях при использовании макетов теряется возможность настройки отчета пользователем. Он не сможет изменять порядок ресурсов и группировок, отключать ресурсы и группировки, т.к. при этом отчет принимает непонятный вид. Данный недостаток не распространяется только на макет поля.
  2. Нет возможности оформить с помощью макета ТОЛЬКО заголовок нужного ресурса (или группы ресурсов). Например, если нужно выровнять заголовки ресурсов по центру. Придется оформлять всю шапку таблицы полностью и получить ограничение из п.1
  3. Нет возможности оформить ТОЛЬКО заголовок итогов. Например, несколько раз требовалось заменить слово “Итого” на слово “Всего”. В этом случае придется отрисовывать всю строку итогов и получить ограничение из п.1 или придумывать что-нибудь другое.

Файлы

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



В

Особенности отображения общих итогов

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


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

Существуют следующие варианты расположения общих итогов :

  • Нет - не отображать итоги. Для группировок не отображаются только итоги по вертикали, а для таблиц и тоги по вертикали и по горизонтали ;

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


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


  • Начало - отображать итоги в начале. Для группировок и строк таблицы общие итоги отображаются перед строками группировки, а для колонок таблицы перед колонками группировки ;

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


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


  • Конец - отображать итоги в конце. Для группировок и строк таблицы общие итоги отображаются после строк группировки, а для колонок таблицы после колонок группировки ;

Пример группировки, для которой параметр Расположение общих итогов по вертикали установлен в значение Конец :


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


  • Начало и конец - отображать итоги в начале и конце. Для группировок и строк таблицы общие итоги отображаются перед и после строк группировки, а для колонок таблицы перед и после колонок группировки ;

Пример группировки, для которой параметр Расположение общих итогов по вертикали установлен в значение Начало и конец :


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


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

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


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

Работа с вычисляемыми полями

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

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

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

Пример

В схеме компоновки данных определим набор данных - запрос:

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

Определим вычисляемое поле. Для этого перейдем в конструкторе схемы компоновки данных на вкладку Вычисляемые поля и добавим поле.

Назовем поле ПеревыполнениеПлана . В качестве выражения поля введем:

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

Для того чтобы в результат данное поле выводилось с точностью два знака, установим для поля в оформлении формат ЧДЦ=2 .


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

Результат отчета будет выглядеть так:

Т.е. для каждой строчки было рассчитано значение вычисляемого поля.

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


Теперь в итог отчета будет выводиться сумма по полям, в том числе и по полю ПеревыполнениеПлана :

Однако, простым суммированием, мы получили не вполне адекватный итог по перевыполнению плана. Мы получили сумму процентов по каждой комбинации Номенклатура / Подразделение .

Для того чтобы получить правильный итог по выполнению плана изменим формулу расчета итога по полю Выполнение плана :

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

Многим мало одного примера какого-либо приема разработки, они хотят понимать, где еще на практике можно использовать разобранный способ.

Вопрос

Для чего может использоваться метод поэлементного вывода результата? В каких задачах может это потребоваться? В отладчике считываю данные “ЭлементРезультата“, но никакого смысла не понимаю.

Реализация услуг и прочих активов

(нажмите, чтобы увеличить картинку)

Ответ

Например, в одном из видеоуроков рассматривается вопрос программной фиксации шапки отчета. Для этого используется поэлементный вывод результата.

Программный код получился вот такой:

Комментарий слушателя

Этот пример работает, но я не понимаю, почему он работает. Что представляет из себя ЭлементРезультата. Сколько их будет в цикле? Что конкретно выводит каждый такой элемент? Почему именно в том элементе, где количество параметров >0, мы добавляем код? Что еще можно получить из перебора этих элементов?

Комментарий тренера

Система компоновки данных выводит результирующий отчет в табличный документ не сразу за одно действие, а определенными порциями. При компоновке выполняются запросы к базе, рассчитываются итоги, учитываются макеты, происходит оформление ячеек отчета, отрисовка ячеек табличного документа и т.д. Все алгоритмы реализованы на уровне платформы, прикладному разработчику недоступны. Ему доступен только тот факт, что вывод отчета происходит порциями, шагами. Каждая порция – это и есть элемент результата компоновки данных. Фактически это специальный вспомогательный объект, при выводе этого элемента в отчет выводится отдельная ячейка, строка, заголовок, описания параметров отчета, описания отборов и т.д.

В элементе результата компоновки данных можно выделить 2 основных свойства. Это Макет (как должна выглядеть выводимая область) и ЗначенияПараметров (какие значения должны принимать параметры в этой области).

Чтобы получить представление, как всё это устроено, можно использовать консоль компоновки от ИР (инструменты разработчика). В ней есть инструмент Исследовать – Элементы результата. Можно посмотреть, как заполнены свойства каждого элемента результата.

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

Как происходит вывод отчета? При выводе отчета сначала выводится заголовок, описание отборов отчета, шапка отчета. В этих данных нет никаких параметров, все выводимые данные находятся непосредственно в выводимом макете (это можно проверить при помощи инструмента ИР Плоский макет компоновки):

Плоский макет компоновки

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

Значит, у нас есть признак: как только значения параметров становятся заполнены, значит, шапку отчета мы уже вывели, приступаем к выводу строк отчета, но сами строки еще не вывели. Следовательно, это самый подходящий момент, чтобы зафиксировать шапку отчета. Получаем высоту таблицы – именно столько строк в табличном документе и нужно закрепить.

Читайте также: