1с скд программно удалить колонку
Работа с программным отбором, группировкой, набором данных, пользовательскими полями.
//Процедура устанавливает значения параметров в запросе.
Процедура УстановитьПараметрКомпоновк и ( Имя , Значение )
КомпоновщикНастроек . Настройки . ПараметрыДанных . Элементы . Найти ( Имя ) ;
Если НЕ ( КомпоновкаДанныхПараметр = Неопределено ) Тогда
Процедура УстановтьОтборПоПолюКомпоновки ( Имя , Значение , ВидСравнения )
Для Каждого ЭлементОтбора Из КомпоновщикНастроек . Настройки . Отбор . Элементы Цикл
Если ЭлементОтбора . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( Имя ) И ЭлементОтбора . ВидСравнения = ВидСравнения Тогда
КомпоновщикНастроек . Настройки . Отбор . Элементы . Удалить ( ЭлементОтбора ) ;
ЭлементОтбора = КомпоновщикНастроек . Настройки . Отбор . Элементы . Добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( Имя ) ;
// Процедура добавляет или удаляет набор данных из схемы компоновки данных
// Схема - СхемаКомпоновкиДанных, схема, в которой нужно добавить(удалить) набор данных
// СхемаИсточник - СхемаКомпоновкиДанных, схема из которой копируется набор данных
// НаборДанныхРодитель - НаборДанныхОбъединениеСхемыКомпоновкиДанных
Процедура ДобавитьУдалитьНаборДанных ( Схема , СхемаИсточник , ИмяНабора , Добавить , НаборДанныхРодитель )
НаборДанных = НайтиНаборДанных ( Схема . НаборыДанных , ИмяНабора ) ;
НаборДанныхИсточник = НайтиНаборДанных ( СхемаИсточник . НаборыДанных , ИмяНабора ) ;
НаборДанных = НаборДанныхРодитель . Элементы . Добавить ( Тип ( "НаборДанныхЗапросСхемыКомпоновкиДанных" ) ) ;
НаборДанных . ИсточникДанных = НаборДанныхИсточник . ИсточникДанных ;
НаборДанныхРодитель . Элементы . Удалить ( НаборДанных ) ;
Если ТипЗнч ( НаборДанных ) = Тип ( "НаборДанныхОбъединениеСхемыКомпоновкиДанных" ) Тогда
Результат = НайтиНаборДанных ( НаборДанных . Элементы , Имя ) ;
Функция НайтиГруппировку ( Структура , Имя , ВидГруппировк и = "Поле" )
Если ТипЗнч ( Элемент ) = Тип ( "ТаблицаКомпоновкиДанных" ) Тогда
Результат = НайтиГруппировку ( Элемент . Колонки , Имя ) ;
ИначеЕсли ТипЗнч ( Элемент ) = Тип ( "ГруппировкаТаблицыКомпоновкиДанных" ) Тогда
Для Каждого Поле Из Элемент . ПоляГруппировки . Элементы Цикл
Если Поле . Поле = Новый ПолеКомпоновкиДанных ( Имя ) Тогда
Результат = НайтиГруппировку ( Элемент . Структура , Имя ) ;
// Процедура добавляет в каждую группировку отчета отбор по непустому значению
// ДоступныеПоляГруппировок - КомпоновщикНастроек.ДоступныеПоляГруппировок
Если ТипЗнч ( Элемент ) = Тип ( "ТаблицаКомпоновкиДанных" ) Тогда
ИначеЕсли ТипЗнч ( Элемент ) = Тип ( "ГруппировкаТаблицыКомпоновкиДанных" ) Тогда
Для Каждого Поле Из Элемент . ПоляГруппировки . Элементы Цикл
Для Каждого ЭлементОтбора 1 Из Элемент . Отбор . Элементы Цикл
Если ЭлементОтбора 1 . Представление = "Отбор по непустому" Тогда
ЭлементОтбора = Элемент . Отбор . Элементы . Добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора . ВидСравнения = ВидСравненияКомпоновкиДанных . Заполнено ;
Параметр = Элемент . ПараметрыВывода . НайтиЗначениеПараметра ( Новый ПараметрКомпоновкиДанных ( "FilterOutput" ) ) ;
Параметр . Значение = ТипВыводаТекстаКомпоновкиДанных . НеВыводить ;
// Процедура добавляет значения интервалов в пользовательское поле
// ПолеИнтервалы - ПользовательскоеПолеВыборКомпоновкиДанных
// Интервал - Строка содержащия границы интервалов: 30,60,90
Процедура УстановитьПользовательскоеПолеИнтервал ( ПолеИнтервалы , Интервал )
ТекИнтервал = СокрЛП ( СтрПолучитьСтроку ( Стр , Счетчик ) ) ;
Вариант = ПолеИнтервалы . Варианты . Элементы . Добавить ( ) ;
Вариант . Значение = "От " + ПредИнтервал + " до " + ТекИнтервал ;
Вариант . Представление = "От " + ПредИнтервал + " до " + ТекИнтервал ;
Группа = Вариант . Отбор . Элементы . Добавить ( Тип ( "ГруппаЭлементовОтбораКомпоновкиДанных" ) ) ;
Группа . ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных . Группа И;
ЭлементОтбора = Группа . Элементы . Добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( "ДнейПросрочки" ) ;
ЭлементОтбора . ВидСравнения = ВидСравненияКомпоновкиДанных . БольшеИлиРавно ;
ЭлементОтбора . ПравоеЗначение = Число ( ПредИнтервал ) ;
ЭлементОтбора = Группа . Элементы . Добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( "ДнейПросрочки" ) ;
ЭлементОтбора . ВидСравнения = ВидСравненияКомпоновкиДанных . Меньше ;
Вариант = ПолеИнтервалы . Варианты . Элементы . Добавить ( ) ;
Группа = Вариант . Отбор . Элементы . Добавить ( Тип ( "ГруппаЭлементовОтбораКомпоновкиДанных" ) ) ;
Группа . ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных . Группа И;
ЭлементОтбора = Группа . Элементы . Добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( "ДнейПросрочки" ) ;
ЭлементОтбора . ВидСравнения = ВидСравненияКомпоновкиДанных . БольшеИлиРавно ;
ЭлементОтбора . ПравоеЗначение = Число ( ПредИнтервал ) ;
Похожее
Добавить комментарий Отменить ответ
Внимание! При включенной блокировке рекламы (AdBlock) могут не отображаться изображения в публикациях. Пожалуйста, поддержите этот сайт, добавив нас в белый список в вашем AdBlock. Спасибо!
Мы используем файлы cookie и подобные технологии, чтобы обеспечить пользователям максимальное удобство при использовании нашего веб-сайта (посредством персонализации, средств аналитики и повышения производительности). ПринимаюОтказазаться Подробнее
Privacy Overview
Рассмотрим задачу, когда колонку СКД нужно выводить в зависимости от выполнения какого-то условия.
Рассмотрим на примере внешнего отчета (без формы отчета, только СКД), условие вывода колонки задано в параметре СКД с типом Булево. Все доступные параметры выведены на форму отчета с помощью свойства параметров Включать в пользовательские настройки (правой кнопкой мышки по параметру Свойства элемента пользовательских настроек) (рис. 1):
Рис. 1. Свойства параметра отчета
В списке выбранных полей отчета присутствует колонка Себестоимость, выводом которой нужно управлять (рис. 2):
Рис. 2. Выбранные поля отчета
У параметра Себестоимость, отвечающего за вывод колонки отчета СКД Себестоимость, на закладке Параметры в СКД задаем свойству Использование значение Всегда, чтобы пользователи выбирали только значение параметра и не могли управлять использованием параметра (рис. 3):
Рис. 3. Свойство параметра Использование
Далее в модуле объекта отчета определяем процедуру ПриКомпоновкеРезультата(), в функции КолонкаСебестоимостьДоступна() прописываем возможные дополнительные условия вывода колонки:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
Для Каждого ПараметрОтчета Из ПараметрыОтчета Цикл
Если ТипЗнч(ПараметрОтчета) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") И ПараметрОтчета.Параметр = Новый ПараметрКомпоновкиДанных("Себестоимость") Тогда
Если НЕ (КолонкаСебестоимостьДоступна() И ПараметрОтчета.Значение) Тогда
//убирем из выводимых колонок
Для Каждого ЭлКолонки Из КомпоновщикНастроек.Настройки.Выбор.Элементы Цикл
Если ЭлКолонки.Поле = Новый ПолеКомпоновкиДанных("Себестоимость") Тогда
//добавляем, если нет
Для Каждого ЭлКолонки Из КомпоновщикНастроек.Настройки.Выбор.Элементы Цикл
Если ЭлКолонки.Поле = Новый ПолеКомпоновкиДанных("Себестоимость") Тогда
В этой статье я расскажу, что такое постобработка в 1С СКД, какие методы постобработки существуют. Вы узнаете, как программно сформировать отчет в СКД, а также я приведу несколько практических примеров постобработки в СКД.
Итак, что же понимается под постобработкой в СКД. Обычно (если не всегда) такое словосочетание применяется для отчетов, построенных на СКД. В результате выполнения отчета пользователем мы имеем какой-то табличный документ. Не всегда с помощью функционала СКД удается получить необходимую форму табличного документа. Поэтому после (пост) выполнения отчета, с помощью методов объекта ТабличныйДокумент выполняется некоторая доработка результата до приемлемого вида (формы).
Чтобы вклиниться в процесс формирования отчета вам необходимо программно получить результат отчета. Поэтому постобработка ВСЕГДА связана с программным формированием отчета. Можно конечно на форме сделать специальную кнопку, чтобы пользователь нажимал ее после формирования отчета, но это будет выглядеть нелепо. Поэтому будем считать, что для постработки отчет на 1С СКД формируется программно всегда.
Есть два способа как можно программно выполнить отчет на СКД:
- Простой. Из формы отчета (нужно чтобы у отчета была форма) вызвать метод СкомпоноватьРезультат. Вы заменяете стандартную кнопку Сформировать собственной командой. В этой команде вызываете указанный выше метод, передав (в случае управляемой формы) режим компоновки – Непосредственно. Затем выполняете постобработку над полученным табличным документом (обычно это реквизит «Результат»). Метод неудобен тем, что нужно добавлять форму (если ее нет), нужно формировать отчет непосредственно, плюс довольно часто для доработки табличного документа нужно переходить на сервер (что не есть хорошо)
- Чуть сложнее. В модуле отчета в предопределенной процедуре «ПриКомпоновкеРезультата» программно формируете отчет. Стандартный шаблон (код) для этого приведен ниже. После получения табличного документа вы выполняете свой код постобработки. Для этого подхода существует еще один вариант реализации, когда обработка выполняется не после формирования табличного документа, а в процессе. Делается это с помощью поэлементного вывода в табличный документ с помощью методов процессора компоновки данных – НачатьВывод, Следующий, ВывестиЭлемент.
С помощью этого шаблона вы можете программно формировать отчет на СКД:
Теперь рассмотрим конкретные примеры, когда вам может понадобиться постобработка. В этих примерах я не всегда буду приводить полный код решения. Где-то будет достаточно идеи, а где-то ссылки на уже готовый отчет.
Вывод картинок
До недавнего времени только с помощью постобработки в отчетах на СКД можно было вывести картинки в отчете. Начиная с релиза платформы 8.3.14 в СКД 1С:Предприятие 8 появилась возможность вывода картинок без постобработки.
Вот такой кусок кода в ПриКомпоновкеРезультата выводить после программного формирования картинку в колонке прайса:
Отчет прайс лист мы разбирали в нашем курсе по СКД
Нумерация колонок отчета
Здесь мы рассмотрим вариант постобработки из формы отчета
Повторение шапки отчета и вывод колонтитулов
В этой статье на Инфостарте разбирается, как с помощью поэлементного вывода можно повторить шапку отчета на каждой странице и как вывести колонтитулы.
Повторение шапки реализуется кодом:
Вывод колонтитулов реализуется через свойство ВерхнийКолонтитул табличного документа:
«Красивые» заголовки для группировок колонок таблицы
Вот так заголовки выводятся совсем некрасиво:
Вот так чуть лучше:
Настройка для такого варианта (для второй и третей группировок колонок):
И только постобработкой (хотя может быть есть какой-то другой секретный способ) можно сделать так:
Вставить разрыв страницы для группировки
В этой статье на Инфостарте рассматривается способ как с помощью поэлементного вывода отчета можно добавить разрыв страницы для группировки в СКД
Рассмотрим как выводить колонки в отчете только при необходимости.
Оглавление
Установим на форме отчета "галочку" при нажатии на которую будет появляться колонка с детальными записями, а при снятии флажка, чтобы отчет формировался без колонки.
01 Из отчета переходим в "Настройки" - вкладка "Оформление". Здесь нам нужно задать 2-а элемента оформления: один флажок будет не видимым для пользователя и не будет выводить колонку "по умолчанию", а следующий флажок будет виден на форме отчета и будет выводить колонку на форму отчета:Приоритет по списку идет снизу - вверх. Поэтому более приоритетная настройка оформления снизу. Обязательно установить "звездочку" для вывода флажка на форму отчета.
02 Переходим к настройке менее приоритетного оформления (по умолчанию) при снятой галочке. На вкладке "Оформление" установить минимальная / максимальная ширина "-0,1":2.1 Вкладка "Оформляемые поля", указать поля, которые нужно скрывать:
2.2 Вкладка "Дополнительно", оставить все галочки как есть:
3.1 Следующие вкладки "Оформляемые поля" и "Дополнительно" по аналогии как в пунктах 2.1 и 2.2
Читайте также: