1с скд отредактировать поля вывода
В этой статье я расскажу, что такое постобработка в 1С СКД, какие методы постобработки существуют. Вы узнаете, как программно сформировать отчет в СКД, а также я приведу несколько практических примеров постобработки в СКД.
Итак, что же понимается под постобработкой в СКД. Обычно (если не всегда) такое словосочетание применяется для отчетов, построенных на СКД. В результате выполнения отчета пользователем мы имеем какой-то табличный документ. Не всегда с помощью функционала СКД удается получить необходимую форму табличного документа. Поэтому после (пост) выполнения отчета, с помощью методов объекта ТабличныйДокумент выполняется некоторая доработка результата до приемлемого вида (формы).
Чтобы вклиниться в процесс формирования отчета вам необходимо программно получить результат отчета. Поэтому постобработка ВСЕГДА связана с программным формированием отчета. Можно конечно на форме сделать специальную кнопку, чтобы пользователь нажимал ее после формирования отчета, но это будет выглядеть нелепо. Поэтому будем считать, что для постработки отчет на 1С СКД формируется программно всегда.
Есть два способа как можно программно выполнить отчет на СКД:
- Простой. Из формы отчета (нужно чтобы у отчета была форма) вызвать метод СкомпоноватьРезультат. Вы заменяете стандартную кнопку Сформировать собственной командой. В этой команде вызываете указанный выше метод, передав (в случае управляемой формы) режим компоновки – Непосредственно. Затем выполняете постобработку над полученным табличным документом (обычно это реквизит «Результат»). Метод неудобен тем, что нужно добавлять форму (если ее нет), нужно формировать отчет непосредственно, плюс довольно часто для доработки табличного документа нужно переходить на сервер (что не есть хорошо)
- Чуть сложнее. В модуле отчета в предопределенной процедуре «ПриКомпоновкеРезультата» программно формируете отчет. Стандартный шаблон (код) для этого приведен ниже. После получения табличного документа вы выполняете свой код постобработки. Для этого подхода существует еще один вариант реализации, когда обработка выполняется не после формирования табличного документа, а в процессе. Делается это с помощью поэлементного вывода в табличный документ с помощью методов процессора компоновки данных – НачатьВывод, Следующий, ВывестиЭлемент.
С помощью этого шаблона вы можете программно формировать отчет на СКД:
Теперь рассмотрим конкретные примеры, когда вам может понадобиться постобработка. В этих примерах я не всегда буду приводить полный код решения. Где-то будет достаточно идеи, а где-то ссылки на уже готовый отчет.
Вывод картинок
До недавнего времени только с помощью постобработки в отчетах на СКД можно было вывести картинки в отчете. Начиная с релиза платформы 8.3.14 в СКД 1С:Предприятие 8 появилась возможность вывода картинок без постобработки.
Вот такой кусок кода в ПриКомпоновкеРезультата выводить после программного формирования картинку в колонке прайса:
Отчет прайс лист мы разбирали в нашем курсе по СКД
Нумерация колонок отчета
Здесь мы рассмотрим вариант постобработки из формы отчета
Повторение шапки отчета и вывод колонтитулов
В этой статье на Инфостарте разбирается, как с помощью поэлементного вывода можно повторить шапку отчета на каждой странице и как вывести колонтитулы.
Повторение шапки реализуется кодом:
Вывод колонтитулов реализуется через свойство ВерхнийКолонтитул табличного документа:
«Красивые» заголовки для группировок колонок таблицы
Вот так заголовки выводятся совсем некрасиво:
Вот так чуть лучше:
Настройка для такого варианта (для второй и третей группировок колонок):
И только постобработкой (хотя может быть есть какой-то другой секретный способ) можно сделать так:
Вставить разрыв страницы для группировки
В этой статье на Инфостарте рассматривается способ как с помощью поэлементного вывода отчета можно добавить разрыв страницы для группировки в СКД
Сталкивался ли кто-нибудь с необходимостью программно отредактировать поля табличного поля, уже после вывода отчета (на СКД)? С какой стороны к этому можно подойти вообще?
Например, набор данных расшифровки я могу перебрать в цикле и получить программно значения всех полей отчета. Но вот для редактирования полей табличного поля нужна уже другая технология.
когда реализовывал подобное принял за правило:
- высота выводимых строк отчетов строк 1 строка ТабДок
- Первая ячейка строки содержит идентификатор строки Отчета
- кешировал соответствие имени области первой ячейки и соответствующим измерениям
(1) Расскажи подробнее, пожалуйста:
- в какой процедуре можно поймать ячейки табличного поля для их окольцовывания и кэширования (кстати - что это?)
делать расшифровку для каждой ячейки табличного документа, сохраняя соотвествие имяячейки - структура этих параметров (значения ресурсов получить нельзя, только если делать через внешнюю таблицу набор и применять фильтр), но это будет очень долго для всех ячеек
редактируется поле в табличном документе - по имение ячеек можно поменять это значение для массива строк таблицы внешнего источника
(6) И поле табличного документа, и табличное поле прекрасно редактируются, независимо от того, чем именно в них выведены данные.
(12) Игнор вопроса. Ну я так сразу и понял, что вы балабол.
(8) Никто не мешает, в принципе - но, с другой стороны, и помощников рядом не наблюдается.
(11) Три недели это жесть - на что же ушли такие временные ресурсы? Мне надо - потому что у меня трехмесячный проект по созданию адского отчета, от которого содрогнется мир. Так вот, август кончается, а отчет работает прекрасно за исключением одно колонки, которая почему-то считается неправильно. Так что мне очень надо пройтись по отчету после вывода, рассчитать этот показатель из остальных ресурсов и сдать уже проект.
(9) Так а в какой процедуре можно поймать табличное поле, да еще и с перебором по ячейкам?
(13)универсальный документ с вводом данных аля эксель, типа поддрежки вычислений по формулам в ячейках
Так а в какой процедуре можно поймать табличное поле, да еще и с перебором по ячейкам?
прикомпоновке результата, либо после вывода таличноо документа обходить весь диапазон R и С, либо в обработкарасшифровки табличного документа
Есть запрос на СКД.
Нужно, при формировании документа-результата, обращаться к каждой текущей строке выборки и, проверяя значения на соответствие условиям, выводить определенные данные в свой макет группировки. Кроме того по каждой строке нужно в переменную записывать по условию сумму значений (т.е. из одной строки сумму включать в переменную, из другой нет), а затем выводить ее в свой макет общих итогов (стандартные общие итоги не считают по такому алгоритму).
Подскажите, как это можно сделать?
а в других процедурах (ПриКомпоновкеРезультата или других) нельзя отловить каждую текущую строку выборки?
(9) нет, пробовал их.
у меня так(результат запроса):
Договор____СуммаДоговора____Документ
1__________5000_____________Док1
1__________5000_____________Док2
1__________5000_____________Док3
1__________5000_____________Док4
В общих итогах по полю Договор выводит 20000, хотя сумма по договору=5000 и надо выводить 5000.
Поэтому думал как-то программно проверять на значение текущей строки в выборке и суммировать в какую-то переменную реальную сумму по договору(5000) и потом значение этой переменной выводить в общие итоги.
(11)так я и суммирую только по договору. Договор есть в четырех документах, соответственно 5000*4=20000. А сумма по договору=5000.
т.е. надо так сделать:
Договор____СуммаДоговора____Документ__СуммаДока
1__________5000_____________Док1_______100
1__________5000_____________Док2_______5600
1__________5000_____________Док3_______4500
1__________5000_____________Док4_______1200
2__________3000_____________Док1_______500
2__________3000_____________Док2_______1600
2__________3000_____________Док3_______2500
2__________3000_____________Док4_______1250
Итого______8000________________________ХХХ
т.е. чтобы итоговая сумма по всем договорам была равна 8000
(10) Я так понял группировка Документ самая нижняя. Добавь в запросе еще одно поле для счетчика документов. На закладке ресурсы добавь еще один ресурс СуммаДоговора рассчитывать по договору, в выражении Сумма(СуммаДоговора)/Сумма(ПолеСчетчикаДокументов) и есстественно через выбор для проверки Сумма(ПолеСчетчикаДокументов) <> 0. Как-то так. Это если структура группировок жесткая.
(16) пробовал этот вариант: для отдельного договора считает сумму по договору правильно, для общих итогов неправильно. Для примера (14) итог по сумме договора посчитает 32000/8=4000, а надо 8000
(17) В общем-то можно в форму добавить новую кнопку "Сформировать" и прописать алгоритм формирования отчета через СКД. Если надо, я могу алгоритм обработки скинут
(21) подскажите, как там проверить, какая группировка там текущая и в зависимости от этого выводить свой определенный макет вместо стандартного.
(14) У тебя не правильно построен запрос. необходимо в компоновке создать два набора данных "Договор" и "Документы" и связать их на закладке "Связи наборов данных" и ВСЕ.
(23) так то же самое получится. Для одного договора (и его суммы) есть несколько документов. При Левом соединениии (все договоры и документы удовлетворяющие условию связи по договору) будет таблица как в (14), т.е. суммы договоров будут повторяться для каждого документа. Далее в итогах они будут увеличиваться в столько раз, сколько документов по договору.
(24) Есть еще вариант, не знаю, будет ли тебе это сложновато?
В СКД есть возможность импользовать "Вложенные схемы".
Суть в том, чтоб строку с итогами выводить отдельной схемой
(28) Не путай человека.
(27) Если в СКД применять несколько наборов данных, то итоги рассчитываются в каждом из них отдельно.
(31) Все зависит от задачи. Ты можешь написать сколь угодно сложные запросы в наборах, а компоновка будет обрабатывать уже готовые наборы. В том числе и при помощи описания связей.
еще вопрос в тему: если в какую-то колонку (поле) в скд нужно будет выводить результат выборки строк какой-то таблицы (прямо через запятую последовательно значения строк выборки), то как это можно сделать?
т.е. примерно так (характеристики):
Договор____СуммаДоговора_____Характеристики_______Документ
1__________5000_______________доп.согл1,допсогл2___Док1___
1__________5000_______________доп.согл1,допсогл2___Док2___
1__________5000_______________доп.согл1,допсогл2___Док3___
1__________5000_______________доп.согл1,допсогл2___Док4___
2__________3000_______________доп.согл1,допсогл2___Док1___
2__________3000_______________доп.согл1,допсогл2___Док2___
2__________3000_______________доп.согл1,допсогл2___Док3___
2__________3000_______________доп.согл1,допсогл2___Док4___
Итого______8000___________________________________________
(36) т.е. так же отдельным набором данных присоединить таблицу характеристик к таблице договоров по условию совпадения по договору, а как потом перебрать все значения таблицы характеристик по договору и вставить их в одну ячейку?
(38) неправильно написал: в поле характеристики через запятую надо вывести значения строк регистра сведений по каждому договору.
(39) Сворачивание нескольких строк в одну отдельная задача.
А в данном случае не понял структуру характеристик. "доп.согл." - это значение характеристики? Тип какой? Сколько может быть характеристик? Подозрение, что не совсем верно организовано хранение данных. Если доп.согл. - это документы, то лучше бы добавить в них реквизит с ссылкой на договор. В общем не понятно.
(40) мне как раз и нужно несколько строк в одну свернуть.Это можно сделать с помощью конструктора скд?
Характеристики - это периодический регистр сведений для договора. Хранит номера, даты, названия доп. соглашений с опред. даты. Нужно перебрать все строки регистра по договору, и вывести их результат через запятую в одном поле скд.
(41) СКД такой вопрос не решает. Можно при помощи запроса (много раз обсуждалось) или при помощи предварительной обработки характеристик - создаем программно ТЗ с колонками "Договор" и "Характеристики" (уже свернутые) и передаем в СКД как объект.
я как раз запросом и пытаюсь сделать - добавил для характеристик набор-запрос, а как в одну строку-то свернуть?
Кстати. В 8.2.14 появилась в СКД функция ВычислитьВыражение, которая, если я правильно понял, может делать тоже самое, что и запрос из (46).
(46) а если у меня для объекта может быть 1 св-во, а может быть и 20, то тогда надо добавлять 20 полей?
КАК Свойство1
.
КАК Свойство20
(48) Ну если кому то нужен отчет, в ячейке которого через запятую будет перечислено 20 свойств - пиши "КАК Свойство20".
А в приведенный запрос будет отображать первые четыре даже если реально 20.
(49) имел ввиду нет ли чего более универсального, т.к. хранить во врем. таблице 20 полей, которые не всегда будут использованы.
Функция возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
Строка() - Если в качестве параметра передан массив, то функция возвращает строку, содержащую строковые представления всех элементов массива, разделенных символами "; ".
(67) через Строка пробовал, но в тексте запроса это не работает, опять же непонятно, как какой-то тип (число, дата) преобразовать в строку в самом запросе
(69) в вычисляемых полях нельзя использовать в выражении вычисляемые поля. У меня нужно сначала к дате добавить символ (", "), затем сложить несколько таких полей. Т.е. поле с датой и с символом(",") должно быть готовое уже в запросе, а потом в вычисляемом поле уже несколько таких полей сложить.
В запросе получаешь поля Т.Свойство1 . Т.Свойство20.
в вычисляемом поле пишешь
Формат(Свойство1,"ДЛФ=D") + ", " + . + Формат(Свойство20,"ДЛФ=D")
(71) я именно так и сделал. Не устраиваю лишние запятые в случае пустых значений. Поэтому нужна предварительная обработка, чтобы "Свойство1" уже содержало текст "Свойство1, " в случае наличия, и текст "" в случае отсутствия текста в "Свойство1".
можно ли менять размер колонок в скд, не используя макеты? Потому как слишком широкие стандартные колонки.
(83) Колонка "Оформление" в описании полей на закладках "Наборы данных" и "Вычисляемые поля".
Или постобработка табличного документа.
ВычислитьВыражениеСГруппировкойМассив пока оставлю. Попробую еще вариант сделать то же через внешний набор данных.
Шрифт заголовков можно изменить в "Макете оформления компоновки данных". Выбор макета осуществляется в настройках компоновки на закладке "Другие настройки". Создать свой макет можно либо в общих макетах ветки конфигурации. либо в другом объекте где возможно создание макетов. При создании макета надо указать тип макета - "Макет оформления компоновки данных". В открывшемся окне редактора макета, за основу возможно взять один из стандартных макетов и отредактировать его.
В какой процедуре нужно этот макет оформления (созданный на основе стандартного) привязывать к компоновщику макета? При нажатии на кнопку "сформировать"? т.е. надо свою кнопку "сформировать" с обработчиком делать?
(92) это стандартный макет. Я так понял, чтобы изменить шрифт заголовков полей группировок, нужно создать свой макет оформления и в нем изменить шрифт. А потом программно его подвязать к компоновщику макета. Если не так, поясните.
(29) Вы писали, что если в СКД применять несколько наборов данных, то итоги рассчитываются в каждом из них отдельно.
Подскажите, если делать не через скд, а просто запросом в модуле отчета, то как результат запроса можно привести к виду (т.е. чтобы итоговая сумма по всем договорам была равна 8000)?
таб1:
Договор____СуммаДоговора____Документ__СуммаДока
1__________5000_____________Док1_______100
1__________5000_____________Док2_______5600
1__________5000_____________Док3_______4500
1__________5000_____________Док4_______1200
2__________3000_____________Док1_______500
2__________3000_____________Док2_______1600
2__________3000_____________Док3_______2500
2__________3000_____________Док4_______1250
Итого______8000________________________ХХХ
т.е. чтобы итоговая сумма по всем договорам была равна 8000.
Я кроме как объединением таблиц не знаю. В случае объединения будет так (таб2):
Договор____СуммаДоговора____Документ__СуммаДока
1__________5000_____________""_________0
1__________0________________Док1_______5600
1__________0________________Док2_______4500
1__________0________________Док3_______1200
2__________3000_____________""_________0
2__________0________________Док1_______1600
2__________0________________Док2_______2500
2__________0________________Док3_______1250
Итого______8000________________________ХХХ
Подскажите, можно ли такое сделать через соединение, т.к. в 1-ом результате (таб1) если делать итоги по сумме договора, получится 32000.
(94)-(95). Создал в разделе макетов отчета макет с типом "Макет оформления компоновки данных". В нем загрузил стандартный макет. Изменил его. Сохранил. Макет в настройках не появился.
+(98)
Подвязал этот макет к компоновщику макета:
После этого отчет выводится через этот макет. Но в настройках его не нашел, поясните.
Схема компоновки данных представляет собой большой конструктор, состоящий из наборов данных, вычисляемых полей, описания итоговых полей (ресурсов), макетов, вариантов настроек и т.д. Схему компоновки достаточно удобно создавать в конфигураторе при помощи конструктора схемы компоновки.
Но на практике часто встречаются задачи, когда схему компоновки нужно программно создать с нуля или доработать существующую схему при помощи кода на встроенном языке, настроить вариант отчета – добавить отбор, установить условное оформление, добавить группировку и т.д. Такие задачи решаются на внедрениях при адаптации типовых конфигураций фирмы “1С” под требования конкретного заказчика.
Задача действительно очень актуальная, участники Мастер-группы по СКД задают много вопросов на эту тему :)
Также традиционно много вопросов возникает при программной работе с пользовательскими настройками отчетов:
- Почему отличаются значения параметра в настройках компоновщика и в пользовательских настройках? Которое из этих значений используется для формирования отчета?
- Как связываются между собой настройки компоновщика и пользовательские настройки?
- Как установить значение отбора или параметра, если они вынесены в пользовательские настройки?
- И многие другие…
Поэтому мы опубликовали серию видеоуроков, в которых рассказывается, как работать со схемой компоновки программно.
Общая длительность всех видеоуроков – 1 час 5 минут.
Для того, чтобы Вам было проще ориентироваться в материале, мы указали тайминг наиболее важных моментов в видео.
Видео 1 – Программное создание варианта отчета
00:37 – В каком обработчике можно расположить код для создания настроек компоновки
01:00 – Где в Синтакс-помощнике можно “подсмотреть” свойства, которые потребуются при написании кода
01:58 – Как настроить группировки отчета
02:28 – Какое свойство позволяет создавать вложенные группировки
03:11 – Как включить/выключить отдельные элементы настроек.
Видео 2 – Программное создание группировки
00:22 – Как создать структуру отчета
02:00 – Как указать поля, по которым выполняется группировка
04:10 – Как настроить выбранные поля
06:30 – Как создать автополе.
Видео 3 – Программное создание вложенной группировки
00:22 – Как создать подчиненную группировку
02:05 – Почему в отчете группировки могут выводиться несколько раз
02:40 – Как проверить наличие группировок в структуре отчета.
Видео 4 – Программное добавление отбора
00:18 – Где в Синтакс-помощнике найти типы данных, необходимые для создания отборов
00:55 – Какие свойства объекта типа ЭлементОтбораКомпоновкиДанных нужно использовать для создания отбора
01:20 – Как создать отбор при помощи программного кода.
Видео 5 – Программная установка сортировки
00:25– Где в Синтакс-помощнике найти типы данных, необходимые для включения сортировки
00:50 – Какие свойства объекта типа ЭлементПорядкаКомпоновкиДанных нужно использовать для включения сортировки
01:00 – Как установить сортировку при помощи программного кода.
Видео 6 – Программное добавление условного оформления
00:25 – Где в Синтакс-помощнике найти типы данных, необходимые для работы с условным оформлением
00:33 – Какие свойства объекта типа ЭлементУсловногоОформленияКомпоновкиДанных нужно использовать
02:08 – Как добавить условное оформление при помощи программного кода
02:31 – Как задать перечень полей, к которым будет применяться условное оформление
03:34 – Как отобрать оформляемые данные
04:15 – Как при помощи программного кода описать применяемое оформление.
Видео 7 – Программная работа с пользовательскими настройками
01:01 – Как программно установить значение параметра
02:00 – Почему значения параметров, выводимые на форму отчета, не совпадают со значениями в самом отчете
04:25 – Что делает метод ПолучитьНастройки
05:10 – Как нужно работать с пользовательскими настройками
06:17 – Для чего нужно свойство ИдентификаторПользовательскойНастройки
07:10 – Где в типовой конфигурации УТ 11 можно найти пример работы с пользовательскими настройками.
Видео 8 – Особенности использования метода ПолучитьНастройки
00:58 – Почему отличаются значения параметра в настройках компоновщика и в пользовательских настройках
01:23 – Как связываются между собой настройки компоновщика и пользовательские настройки
03:06 – Как работает метод ПолучитьНастройки и значение какого типа он возвращает
Видео 9 – Программное создание отборов в пользовательских настройках
00:34 – Чем отличается отбор в настройках компоновщика и отбор в пользовательских настройках
02:34 – Как используется свойство ИдентификаторПользовательскойНастройки
03:08 – Какой алгоритм должен использоваться для установки значения отбора в пользовательских настройках
03:42 – Как реализовать процедуру для установки значения отбора в пользовательских настройках.
Видео 10 – Программное создание схемы компоновки
00:40 – Как при компоновке отчета программно создать схему, по которой будет формироваться отчет
02:15 – Какой алгоритм должен использоваться для программного создания с нуля схемы компоновки
02:50 – Как программно создать источник данных схемы компоновки
04:00 – Как программно добавить в схему набор данных – объект
06:25 – Как программно добавить поля набора данных.
Хотите научиться грамотно создавать отчеты на СКД и дорабатывать отчеты в типовых конфигурациях?
Чтобы подробнее изучить возможности системы компоновки данных и уверенно применять механизм на практике, рекомендуем пройти курс Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД)
Сегодня мы рассмотрим одну из самых частых задач, с которой сталкиваются специалисты по 1С – доработку отчета типовой конфигурации.
О чем эта статья
В статье рассмотрен пример доработки типового отчета «Расчетный листок» в конфигурации «Зарплату и Управление Персоналом 3.0». На данном примере показываются общие шаги разработчика, в случае если он слабо знаком с конкретной реализацией конкретного типового отчета на базе СКД.
Применимость
В материалах статьи в качестве примера используется конфигурация, «Зарплата и Управление Персоналом», редакции 3 3.0.25.122. Но от этого примеры доработки, продемонстрированные в видео, не стали устаревшими, т.к. акцент сделал именно на логике рассуждений разработчика перед которым поставлена подобного рода задача. Смело смотрите видео, это must have!
В качестве конфигурации выбрали “Зарплату и Управление Персоналом 3.0” – в силу следующих причин:
- Отчеты из ЗУП традиционно считаются сложными
- Иногда даже задача – понять, откуда берутся данные в отчет – вызывает у специалистов сложности.
Что конкретно мы будем делать
Это реальная задача из Мастер-группы – доработаем отчет “Расчетный листок” так, чтобы в шапке выводилась информация о дате приема сотрудника на работу.
Очень простая задача :)
Но есть одна сложность – информацию о дате приема типовой отчет не содержит, её нужно получать с помощью отдельного запроса.
И запрос этот нужно интегрировать в типовой отчет…
А параллельно мы разберем и приемы работы с СКД:
- Анализ программного кода типового отчета – определение точек минимального воздействия на конфигурацию
- Использование расширения языка запросов для системы компоновки данных – выражения в фигурных скобках
- Программное формирование отчета на СКД – доработку процедуры ПриКомпоновкеРезультата
- Вывод результата компоновки в коллекцию – дерево значений
- Доработку текста запроса типового отчета – получение связанной информации
- Работу с настройками компоновки – определение структуры, использование нескольких группировочных полей в одной группировке
- Использование макета – табличного документа при выводе отчета на СКД
- Отладку типового отчета, запущенного в фоновом режиме
Итак, поехали! 21 минута видео :)
Видео 1: Как за 10 минут понять логику формирования типового отчета
В этом уроке приступаем к решению задачи по модификации Расчетного листка в ЗУП 3.0.
Суть задачи состоит в том, чтобы вывести в отчет связанную информацию из других объектов – необходимо запросом получать дополнительные данные.
Но прежде, чем писать код, нужно найти точки минимального воздействия – чтобы внести в конфигурацию как можно меньше изменений.
В данном уроке мы показываем, как понять логику формирования типового отчета на СКД с программным заполнением полей и ручным выводом данных в табличный документ.
Видео 2: Как с помощью 2 строк кода изменить заполнение отчета
В уроке показано, как найти, где хранятся требуемые пользователю данные – это могут быть различные объекты системы. В этой задаче очень помогает умение читать объемные запросы.
В итоге задача решается с минимальными изменениями:
- Новая строка в макете
- Левое соединение в запросе
- Две строки в программном коде.
Также из видео Вы узнаете, для чего в запросе может использоваться конструкция “Выбрать Первые 0”.
Эта тема детально раскрыта в курсе:
Поддержка – 2 месяца. Объем курса – 34 учебных часа.
Не откладывайте свое обучение!
Комментарии / обсуждение (65):
Добрый день! Вопрос по УТ 11. В типовых отчётах добавляются доп. реквизиты. Вопрос: как их исключить из отчетов?
Подробнее.
Существует, примерно, 100 видов номенклатуры, к каждому из которых привязан свой набор доп. реквизитов от 5 до 10).
При изменении варианта отчета, где используется номенклатура, при раскрытии её, вываливается список всех доп. реквизитов. Жуткий тормоз. Можно ли сделать так, чтобы при отборе или добавлении поля, не выводились эти доп. реквизиты?
Добрый день!
Нет, поскольку это платформенный механизм – для справочника Номенклатура в конфигураторе настроены характеристики на уровне объектов метаданных. Поэтому они будут добавляться в список полей номенклатуры при работе с отчетами, динамическими списками, т.е. в механизмах, базирующихся на системе компоновки данных.
Рассмотрите вариант переноса доп. реквизитов в обычные реквизиты справочника Номенклатура. Это должно увеличить производительность описанных действий.
Раньше, помнится, надо было настраивать в СКД на закладке “Характеристики”, а сейчас, выходит, на Табл. часть “Доп. реквизиты” программист повлиять не может?
В УТ 11 не требуется заполнять закладку Характеристики в тексте запроса набора данных.
Дело в том, что в этой конфигурации настроены характеристики на уровне объектов метаданных. Например, можно в конфигураторе обратиться к справочнику Номенклатура, в контекстном меню выбрать пункт Характеристики:
Здесь указано, откуда система будет получать перечень характеристик и их значения.
СКД учитывает эту настройку, поэтому дополнительно прописывать характеристики в запросе не нужно.
По поводу переноса в обычне реквизиты. Дело в том, что у каждого вида номенклатуры свои доп. реквизиты и они не пересекаются. Это сколько же их будет?!
Можно на копии базы сделать тестовый пример, проверить производительность и все остальные аспекты, принять решение, стоит ли выполнять такие действия на рабочей базе.
Добрый день! Прошу помощи подскажите пожалуйста?
Клиент попросил доработать типовой отчет в БП 3.0 , конфигурация на поддержке. Было принято решение сделать отчет внешним, но столкнулся с проблемой…
Сохраняю отчет как внешний и пытаюсь открыть его через файл открыть и тут же выдается ошибка “не известный тип объекта метаданных, ВнешнийОтчет.ЗадолженностьПокупателейПоСрокамДолга”. Как победить эту ошибку? В УТ 11.4 таких проблем не возникало.
Добрый день!
Причина ошибки заключается в том, что у внешнего отчета или обработки в принципе нет модуля менеджера. А у отчета или обработки из конфигурации такой модуль присутствует.
В БП в модуле менеджера отчетов есть программный код, а в УТ – нет. Этим объясняется разница в поведении конфигураций.
При сохранении отчета или обработки во внешний файл модуль менеджера будет потерян. Поэтому нужно учесть этот момент, доработать внешний отчет, например, добавив нужные процедуры в модуль объекта.
Альтернативный вариант – создать расширение, в котором реализовать новый отчет, модуль менеджера в таком случае будет доступен.
>> Также из видео Вы узнаете, для чего в запросе может использоваться конструкция “Выбрать Первые 0”
А я так и не понял для чего используется такая конструкция?
Ведь на выходе такой запрос будет возвращать пустую таблицу с колонками.
А как тогда выбираются данные для этой таблицы?
Добрый день!
Этот текст запроса программно при компоновке отчета будет заменен на сложный запрос, который действительно извлекает данные из базы, а нем уже не будет конструкции ВЫБРАТЬ ПЕРВЫЕ 0.
Текст такого запроса формируется программно из отдельных кусочков, временных таблиц, зависит от различных условий, поэтому указать его непосредственно в отчете не получится.
Но в то же самое время нужно определить, какие поля набора данных должны быть в отчете. Для этого создается фиктивный текст запроса в наборе данных отчета. Он не будет выполняться, единственная его задача – описать поля отчета, а также типы данных этих полей.
Благодарю за ответ.
То, что это не запрос, а его “набросок” – это понятно.
Но не понятно назначение конструкции “ВЫБРАТЬ ПЕРВЫЕ 0”. Ведь если ее убрать (заменить на “ВЫБРАТЬ”), то ничего не изменится, т.к. этот запрос все равно не исполняется, а модифицируется из кода.
Да, конечно, не изменится. Но можно выделить 2 способа использования именно такой конструкции:
1. Она обеспечивает формирование пустого результата запроса с набором колонок нужного типа. Если использовать просто ВЫБРАТЬ, то в результате будут данные (одна строка с пустыми значениями).
2. Это может быть удобным маркером, признаком, что именно этот запрос нужно подменить. Потому что в обычном запросе для получения данных из базы такая конструкция точно не будет применяться.
Да. Действительно. Для получения пустой таблицы, указанного пользователем формата – весьма интересный прием.
Благодарю за ответы.
Пожалуйста. Обращайтесь:)
И приходите к нам на курс по СКД. В Мастер-группе отвечаем на Ваши вопросы по СКД.
Процедура Печать(ТабДок, Ссылка) Экспорт
// Макет = Документы.РасчетСтипендии.ПолучитьМакет(“Печать”);
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
| РасчетСтипендии.Дата КАК Дата,
| РасчетСтипендии.Номер КАК Номер,
| РасчетСтипендииСтуденты.Студент КАК Студент,
| РасчетСтипендииСтуденты.Группа КАК Группа,
| РасчетСтипендииСтуденты.ТипСтипендии КАК ТипСтипендии,
| РасчетСтипендииСтуденты.НомерСеместра КАК НомерСеместра
|ИЗ
| Документ.РасчетСтипендии.Студенты КАК РасчетСтипендииСтуденты
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасчетСтипендии КАК РасчетСтипендии
| ПО РасчетСтипендииСтуденты.Ссылка = РасчетСтипендии.Ссылка
|ГДЕ
| РасчетСтипендии.Ссылка В(&Ссылка)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РасчетСтипендииРезультатыСдачи.НомерСтроки КАК НомерСтроки,
| РасчетСтипендииРезультатыСдачи.Предмет КАК Предмет,
| РасчетСтипендииРезультатыСдачи.РезультатСдачи КАК РезультатСдачи,
| РасчетСтипендииРезультатыСдачи.Студент КАК Студент
|ИЗ
| Документ.РасчетСтипендии.РезультатыСдачи КАК РасчетСтипендииРезультатыСдачи
|ГДЕ
| РасчетСтипендииРезультатыСдачи.Ссылка В(&Ссылка)”;
РезультатЗапроса = Запрос.ВыполнитьПакет();
Выборка = РезультатЗапроса[0].Выбрать();
ОбластьЗаголовок = Макет.ПолучитьОбласть(“Заголовок”);
ОбластьИнформацияСтудента = Макет.ПолучитьОбласть(“ИнформацияСтудента”);
ОбластьРезультат = Макет.ПолучитьОбласть(“Результат”);
ОбластьРезультатыСдачиШапка = Макет.ПолучитьОбласть(“РезультатыСдачиШапка”);
ОбластьРезультатыСдачи = Макет.ПолучитьОбласть(“РезультатыСдачи”);
ОбластьЗаголовок.Параметры.Заполнить(Выборка);
ОбластьЗаголовок.Параметры.Дата = Формат(Выборка.Дата, “ДФ=dd.MM.yyyy”);
ТабДок.Вывести(ОбластьЗаголовок);
//ТабДок.Вывести(ОбластьРезультаты);
ОбластьИнформацияСтудента.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьИнформацияСтудента, Выборка.Уровень());
ТабДок.Вывести(ОбластьРезультат);
ТабДок.Вывести(ОбластьРезультатыСдачиШапка);
//Выборка = Выборка.РезультатыСдачи.Выбрать();
//Каждому студенту свои предметы
Выборка2.Следующий();
ОбластьРезультатыСдачи.Параметры.Заполнить(Выборка2);
ТабДок.Вывести(ОбластьРезультатыСдачи, Выборка2.Уровень());
Читайте также: