СКД: все, что вы хотели знать о подмене схемы компоновки данных в отчетах и обработках

Публикация № 1339226 07.12.20

Разработка - СКД

СКД схема компоновки данных отчет обработка

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

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

    Для написания примеров отчета и обработки я воспользовался типовой конфигурацией "Библиотека Стандартных Подсистем (демо)" версии 3.0.3.341 (платформа 8.3.13.1472). Итак, поехали! Начнем с простого.

    1. Подмена схемы компоновки данных в отчете.

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

 
 Запрос для набора данных СКД "Номенклатура":

    

    Для номенклатуры настроим группировки и добавим отбор по реквизиту "Родитель", который включим в пользовательские настройки:

 

 
 Запрос для набора данных СКД "ДоговорыКонтрагентов":

    Для договоров настроим группировки и добавим отборы по реквизитам "Контрагент" и "Организация", которые также включим в пользовательские настройки:


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

    Добавляем для реквизита "ИмяОтчета" событие "ПриИзменении" и переходим в модуль формы. Здесь добавляем событие "ПриСозданииНаСервере" из которого вызываем процедуру ЗаполнитьСписокОтчетов():

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЗаполнитьСписокОтчетов();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСписокОтчетов()
    
    СписокМакетов = Новый Структура("Номенклатура, ДоговорыКонтрагентов");
    
    Для Каждого Макет Из СписокМакетов Цикл
        Элементы.ИмяОтчета.СписокВыбора.Добавить(Макет.Ключ, Макет.Ключ);
    КонецЦикла;    
    
КонецПроцедуры

    А из события "ИмяОтчетаПриИзменении" вызовем процедуру УстановитьМакетОтчета()

&НаКлиенте
Процедура ИмяОтчетаПриИзменении(Элемент)
    УстановитьМакетОтчета()
КонецПроцедуры

&НаСервере
Процедура УстановитьМакетОтчета()
    
    ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
    СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет(ИмяОтчета);
    
    Отчет.АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
    
    Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет.АдресСхемы));
    Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    Отчет.КомпоновщикНастроек.Восстановить();    
    
КонецПроцедуры

    Процедура ЗаполнитьСписокОтчетов() принципиальной роли не играет, а вот на процедуре УстановитьМакетОтчета() остановимся подробнее:

//Здесь мы получаем схему компоновки данных из макетов нашего отчета по выбранному имени отчета:
    ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
    СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет(ИмяОтчета);

// помещаем схему во временное хранилище и сохраняем адрес в реквизите "АдресСхемы":
    Отчет.АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор); 

//инициализируем компоновщик настроек 
    Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет.АдресСхемы));

// загружаем настройки
    Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
// вызываем метод компоновщика настроек восстановить. 
//Согласно описанию, метод "Восстанавливает работоспособность настроек. 
//В случае, если был изменен источник доступных настроек, часть полей, 
//использованных в настройках, может потерять связь с доступными полями.", 
//а источник данных у нас был изменен еще как.
    Отчет.КомпоновщикНастроек.Восстановить();    

    Сохраняем, запускаем обработку и смотрим, что получилось. Меняем имя отчета и смотрим, как соответственно меняются пользовательские настройки:


 

    То что нужно! Нажимаем "Сформировать" иииии.... получаем ошибку:

 

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

    Не беда! Идем в модуль отчета и создаем обработчик события "ПриКомпоновкеРезультата" где и присваиваем нужную схему(вот для чего нужен был реквизит "АдресСхемы"):

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(АдресСхемы);
КонецПроцедуры

    Запускаем отчет и наслаждаемся результатом:

    Как видим, схемы меняются, отчеты строятся, отборы работают. И всего-то потребовалось 5 ключевых строчек кода. 

    Теперь давайте немного усложним задачу.

    2. Использование нескольких схем компоновки данных в обработках. 

    Допустим, у нас есть какая-нибудь навороченная обработка, типа панели функций или монитора руководителя в которую нам, кроме всего, также нужно выводить несколько отчетов. При реализации подмены СКД в отчете нам помог предопределенный компоновщик настроек и наличие события "ПриКомпоновкеРезультата" в модуле объекта. В обработке всего этого нет - и придётся генерить наши отчеты вручную, но как быть с настройками? И здесь на помощь нам спешит тип данных "КомпоновщикНастроекКомпоновкиДанных".

    Создадим новую внешнюю обработку "_СКДЗаменаСхемы". Чтобы не повторятся, закинем в нее схемы компоновки из нашего предыдущего отчета.

    Создадим форму отчета и добавим следующие реквизиты формы:

        "ИмяОтчета" - тип Строка, аналогично одноименному реквизиту в отчете.
        "АдресСхемы" - тип Строка, как и в отчете, но нам больше не нужно будет использовать его в модуле объекта, поэтому из реквизитов объекта он перекочевал в реквизиты формы.
        "Результат" - тип ТабличныйДокумент, в который мы будем выводить наши отчеты.
        "КомпоновщикНастроек" – тип КомпоновщикНастроекКомпоновкиДанных.

    Также добавим команду "СформироватьОтчет" и обработчики для нее на клиенте и на сервере.

    А теперь, внимание, очень важный момент, делаем "КомпоновщикНастроек" основным реквизитом формы:

    Это откроет нам доступ к расширению управляемой формы для компоновщика настроек и позволит использовать метод СоздатьЭлементыФормыПользовательскихНастроек().

    Теперь, добавим группу без отображения "ГруппаПользовательскиеНастройкиОтчеты" и переходим в модуль формы.
По аналогии с отчетом, добавим события "ИмяОтчетаПриИзменении" и "ПриСозданииНаСервере", с соответствующими вызовами процедур  ЗаполнитьСписокОтчетов() и УстановитьМакетОтчета(). Только теперь в процедуре УстановитьМакетОтчета() добавляется вызов метода СоздатьЭлементыФормыПользовательскихНастроек():

&НаСервере
Процедура УстановитьМакетОтчета()
    
    Обработка = РеквизитФормыВЗначение("Объект");
    
    СКД = Обработка.ПолучитьМакет(ИмяОтчета);
    
    АдресСхемы = ПоместитьВоВременноеХранилище(СКД, УникальныйИдентификатор);
    
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
    КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);
    КомпоновщикНастроек.Восстановить();    
    
    СоздатьЭлементыФормыПользовательскихНастроек(Элементы.ГруппаПользовательскиеНастройкиОтчеты, РежимОтображенияНастроекКомпоновкиДанных.БыстрыйДоступ, 4);
    
КонецПроцедуры

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

    Теперь осталось добавить обработчики команды "Сформировать" и механизм динамической замены СКД в обработке готов:

&НаСервере
Процедура СформироватьОтчетНаСервере()
    
    Результат.Очистить();
    
    Схема = ПолучитьИзВременногоХранилища(АдресСхемы);
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();

    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент();
    ПроцессорВывода.УстановитьДокумент(Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
КонецПроцедуры

&НаКлиенте
Процедура СформироватьОтчет(Команда)
    СформироватьОтчетНаСервере();
КонецПроцедуры

    Сохраняем, запускаем, наслаждаемся:

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

    Ну и чтоб совсем все было красиво, осталось добавить обработчик расшифровки.
    Добавим реквизит формы "АдресДанныхРасшифровки" тип Строка.
    В конце процедуры СформироватьОтчетНаСервере() добавим строку:

    АдресДанныхРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровки, Новый УникальныйИдентификатор);

    Добавим обработчик "ОбработкаРасшифровки" для элемента формы Результат:

&НаКлиенте
Процедура ОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
    
    Данные = ОбработатьРасшифровки(Элемент.Имя, Расшифровка, СтандартнаяОбработка);
    ОткрытьЗначение(Данные);
    
КонецПроцедуры

и функцию:

&НаСервере
Функция ОбработатьРасшифровки(Инд, Расшифровка, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    ДанныеРасшифровок = ПолучитьИзВременногоХранилища(АдресДанныхРасшифровки);
    
    Если ТипЗнч(Расшифровка) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") тогда
        
        ЭлементРасшифровки = ДанныеРасшифровок.Элементы[Расшифровка];
        
        Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
            
            Для Каждого Поле Из ЭлементРасшифровки.ПолучитьПоля() Цикл
                
                Возврат Поле.Значение;
                
            КонецЦикла;
            
        КонецЕсли;
        
    КонецЕсли;
    
КонецФункции

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

    P.S. И немного о практическом применении. Например, если реализовать добавление и хранение СКД в базе, допустим, в регистре сведений в реквизите с типом "ХранилищеЗначения", то подобную обработку можно использовать для просмотра динамически добавляемых/обновляемых отчетов, что очень выручает в случаях, когда нет возможности обновить конфигурацию в данный момент, а срочно нужно подправить отчет или создать новый "на вчера".
    СКД является невероятно мощным механизмом, и я постоянно открываю для себя все новые и новые его возможности и нахожу новые, неочевидные и нестандартные способы применения. Чего и вам желаю :)
    Enjoy!

Скачать файлы

Наименование Файл Версия Размер
Использование нескольких схем компоновки данных в обработке

.epf 11,30Kb
9
.epf 11,30Kb 9 Скачать
Использование нескольких схем компоновки данных в отчете

.erf 11,56Kb
16
.erf 11,56Kb 16 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 1472 07.12.20 10:26 Сейчас в теме
А без формы отчета получится такое провернуть?
2. user1502278 201 07.12.20 14:13 Сейчас в теме
(1) Конечно, второй пример как раз для формы обработки.
3. ixijixi 1472 07.12.20 14:14 Сейчас в теме
(2) Ненене, нужно для отчета без формы
4. user1502278 201 07.12.20 14:18 Сейчас в теме
(3) Не совсем понял, что значит отчет без формы? Если у вас нет формы и вы генерите отчет где-то программно, без участия пользователя, например для рассылки, то вам и не нужна настройка пользовательских полей, а именно это основная тема данной статьи.
Формировать отчеты СКД программно довольно просто, есть множество статей на эту тему.
5. ixijixi 1472 07.12.20 14:31 Сейчас в теме
(4)
значит отчет без формы
Значит, что у него не назначена основная форма, а используется либо общая форма, либо генерируемая платформой.
6. user1502278 201 07.12.20 14:38 Сейчас в теме
(5) А ну т.е. форма все-таки есть, тогда получится конечно. Принцип тот же.
7. ixijixi 1472 07.12.20 14:40 Сейчас в теме
(6) Форма есть, но ее менять нельзя)
16. NikeeNik 68 04.03.21 14:52 Сейчас в теме
(7) В модуле отчёта можно переопределить свойство отчёта "СхемаКомпоновкиДанных"
#Область ОбработчикиСобытий

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	УправлениеРазграничениемДоступа.НастроитьОтборыОтчета(ЭтотОбъект)
	
КонецПроцедуры

#КонецОбласти

СхемаКомпоновкиДанных = ПолучитьМакет("АльтернативнаяСхемаКомпоновки");
Показать
17. ixijixi 1472 10.06.21 11:08 Сейчас в теме
(16) А как название в модуль как передать? И в какой момент?
18. NikeeNik 68 05.07.21 12:14 Сейчас в теме
(17) По идее это нужно для того чтобы переопределить типовую схему на нашу при стандартных вызовах отчета с типовой формой, когда негде вводить никакие названия, соответственно никак. Если отчет запускается программно - то там можно переопределить схему компоновки для объекта отчета без изменений в модуле отчета, тогда при вызове можно указывать какие схемы использовать с какими названиями.
8. СергейК 51 13.12.20 09:21 Сейчас в теме
Подскажите, в первой части про отчет почему нужно в процедуре ПриКомпоновке устанавливать СхемаКомпоновкиДанных, мы же ее уже присвоили в проц УстановитьМакетОтчета()? Почему она не запомнилась?
9. user1502278 201 13.12.20 15:04 Сейчас в теме
(8) Нет, в процедуре УстановитьМакетОтчета()(не очень удачно выбрал название процедуры, согласен) мы установили только настройки компоновки, т.е. пользовательские настройки, отборы, группировки - вот это вот все. Но отчет по прежнему не знает, как получить данные, какую схему ему использовать, (поскольку основную мы сознательно выключили). Для этого в событии отчета ПриКомпоновкеРезультата мы и устанавливаем реквизит отчета СхемаКомпоновкиДанных.
23. Roootru 15.03.23 08:26 Сейчас в теме
(9) Спасибо за полезный материал, добавлю 5 копеек насчет комментария, т.к. тоже задумался над этим моментом и может такие же как я и СергейК всплывут. В модуле объекта можно обращаться напрямую к переменной "СхемаКомпоновкиДанных" (которая по сути и является основной схемой и при работе с СКД уже привыкаешь к наименованию), но тут работа в модуле формы и не стоит путать ту переменную и эту. Я сразу не обратил внимание . Если бы тут переменная допустим называлась "ДействующаяСхемаКомпоновкиДанных" сразу становится понятно что переменная создана в процедуре и просто создана для помещения во временное хранилище
10. szv 113 14.12.20 19:51 Сейчас в теме
Если пользователь создал свой вариант отчета и по кнопке "Выбрать вариант" желает его получить. Как отработать эту ситуацию?
11. user1502278 201 14.12.20 20:17 Сейчас в теме
(10)
В приведенном отчете типовой механизм редактирования/сохранения варианта работает по умолчанию, но все варианты для всех ваших схем будут сохранятся в рамках общего отчета. Соответственно, вы можете загрузить вариант не соответствующий текущей СКД, что при попытке формирования отчета выкинет в ошибку. Чтобы сохранять/загружать варианты, соответствующие текущей схеме, надо обрабатывать события ПриСохраненииВариантаНаСервере, ПередЗагрузкойВариантаНаСервере.
12. szv 113 17.12.20 03:44 Сейчас в теме
Вы бы могли усилить свою статью этой темой?
13. szv 113 17.12.20 14:24 Сейчас в теме
"В приведенном отчете типовой механизм редактирования/сохранения варианта работает по умолчанию" - цитата

У меня не получилось. Пришлось использовать - КлючТекущегоВарианта

Вариант = СхемаКомпоновкиДанных.ВариантыНастроек[ЭтаФорма.КлючТекущегоВарианта];

Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Вариант.Настройки);
14. Shaldryn 15.01.21 09:50 Сейчас в теме
Думаю чистка основной схемы лишнее, можно было оставить какую то основную и при открытии в списке устанавливать ее.

А так спасибо за статью, маленько просветился на счет разных схем, а то у меня как бы были "разные" на самом деле одинаковые, просто запрос немного менялся, а поля и структура были одинаковы и я не получал ошибки при изменении и формировании и поэтому ПриКомпоновкеРезультата не дописывал указанный вами код.
15. user1502278 201 15.01.21 21:51 Сейчас в теме
(14)
Думаю чистка основной схемы лишнее, можно было оставить какую то основную и при открытии в списке устанавливать ее

Конечно, я очистил для примера, чтобы показать, что недостаточно только установки настроек компоновщика, схема тоже нужна.
19. user1559729 30.03.22 14:26 Сейчас в теме
Не удается установить КомпоновщикНастроек основным реквизитом формы. Открывает пустые свойства.
Прикрепленные файлы:
20. user1559729 30.03.22 14:54 Сейчас в теме
Сделал по первому варианту для 2-х схем - вроде бы работает...
Только добавил только УстановитьМакетОтчета() в ПриСозданииНаСервере() и установку имени отчета при старте.
21. user1559729 30.03.22 18:44 Сейчас в теме
И ещё сохранение параметров добавил при смене схемы, которые у меня одинаковые для двух схем. Может кому пригодится:

&НаСервере
Процедура УстановитьМакетОтчета()
	
	// Сохраним значение параметра КонецПериода для сохранения значения при смене схемы
	ПараметрКонецПериода = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода");
	ПользовательскийПараметрКонецПериода = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПараметрКонецПериода.ИдентификаторПользовательскойНастройки);   
	КонецПериодаЗначение = ПользовательскийПараметрКонецПериода.Значение;
	// Используется всегда (не устанавливаем использование)
	
	// Сохраним значение параметра Подразделение для сохранения значения при смене схемы
	ПараметрПодразделение = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Подразделение");
	ПользовательскийПараметрПодразделение = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПараметрПодразделение.ИдентификаторПользовательскойНастройки);   
	ПодразделениеЗначение = ПользовательскийПараметрПодразделение.Значение;
	ПодразделениеИспользование = ПользовательскийПараметрПодразделение.Использование;
			
	ИмяМакета = ?(ИмяОтчета = "Подразделение, Склад", "МакетНомерОдин", "МакетНомерДва");
	
    ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
    СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет(ИмяМакета);
    
	Отчет.АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
    
	Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет.АдресСхемы));
	
	Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
	
	// Восстановим сохраненное значение параметра КонецПериода
	ПараметрКонецПериода = Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода");
	ПараметрКонецПериода.Значение = КонецПериодаЗначение;
	
	// Восстановим сохраненное значение параметра Подразделение
	ПараметрПодразделение = Настройки.ПараметрыДанных.Элементы.Найти("Подразделение");
	ПараметрПодразделение.Значение = ПодразделениеЗначение;
	ПараметрПодразделение.Использование = ПодразделениеИспользование;
			
    Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
    Отчет.КомпоновщикНастроек.Восстановить();    
    
КонецПроцедуры
Показать
22. PavelTihonov 04.02.23 00:17 Сейчас в теме
(21) а как перенести настройки (значения параметров) если этих параметров много? Имеется ввиду не писать код для каждого параметра
Оставьте свое сообщение

См. также

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

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

07.02.2023    3283    quazare    7    

35

Выборочная свертка группировок для СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Россия Абонемент ($m)

Методика разработки отчета на СКД с возможностью свёртки части группировок по заданному программно условию. - свертка по значению поля (неотрицательные - сворачиваются); - свертка подчиненных в иерархии с произвольным количеством уровней.

1 стартмани

16.01.2023    1751    schthaxe    3    

27

Разрабатываем отчет на СКД, содержащий данные из расширения

СКД Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

17.10.2022    3959    al_zzz    9    

44

Хитрости СКД. Часть 4

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

12.10.2022    5106    milkers    17    

45

Тестовая задача: таблица умножения на СКД

СКД Платформа 1С v8.3 Бесплатно (free)

Альтернативное решение предложенной задачи.

14.06.2022    4209    81    echo77    6    

38

Хитрости СКД. Часть 3

СКД Универсальные функции Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

28.05.2022    6671    milkers    11    

87

Отчет на СКД с использованием форм из БСП. Варианты передачи списка значений в параметр СКД

БСП (Библиотека стандартных подсистем) СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Россия Абонемент ($m)

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

1 стартмани

20.04.2022    5328    eugene-p    8    

28

По-настоящему свои макеты в отчетах СКД. Исследование процесса компоновки и генерация кода отчета

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Как скрестить формирование отчетных данных с помощью СКД и вывод в табличный документ с помощью Макет.ПолучитьОбласть(...) и ТабДок.Вывести(Секция)? А также сделать этот процесс простым и удобным? Об этом в статье ниже.

1 стартмани

22.03.2022    4864    Alxby    8    

47

Редактирование данных в ячейках СКД (простая реализация)

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

11.03.2022    8534    7    Flashill    20    

52

Убираем параметры из отбора СКД

Универсальные функции СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Заметка о некоторых технических нюансах параметров данных и отборов СКД.

17.02.2022    5412    Yashazz    29    

31

Шаблон отчета на СКД (обычные формы)

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Улучшенный шаблон отчёта СКД, реализованный на обычных формах. Лаконичный и функциональный, весь необходимый минимум для управления отчётом вынесен на форму отчёта, что избавляет рядовых пользователей от необходимости лезть внутрь настроек отчёта. Форма сделана гибкой и позволяет легко себя адаптировать под Ваши потребности. Ряд элементов формы сделан сворачиваемыми и растягиваемыми.

2 стартмани

14.02.2022    6692    19    Eugen-S    4    

9

Отладка СКД

СКД Система компоновки данных Бесплатно (free)

На митапе «Практика применения СКД» выступил ведущий разработчик 1С аутсорсинговой компании Programming Store Павел Шемякин. Павел рассказал, как бороться с нежелательной «оптимизацией» запроса СКД, какие инструменты для отладки СКД можно использовать – в чем их отличия и преимущества, и показал, как работать с консолью компоновки данных – на какие элементы структуры XML-файла макета СКД обращать внимание при поиске причин неправильной работы отчета.

08.02.2022    10613    ProgrammingStore    5    

85

Программная работа и компоненты СКД

СКД Система компоновки данных Бесплатно (free)

На митапе «Практика применения СКД» выступил архитектор Digital Business Петр Базелюк. Он рассказал о том, как работать с СКД программно, и как, используя общедоступную библиотеку FoxyLink, создать свой процессор вывода результата СКД напрямую в формат JSON или в CSV.

04.02.2022    4547    pbazeliuk    4    

69

Доработка типового отчета на СКД с помощью расширения

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

09.01.2022    9364    Spacer    9    

26

Реализация отборов на форме с помощью СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

28.12.2021    14541    quazare    6    

130

Варианты применения СКД вне отчетов в отраслевых конфигурациях

СКД Система компоновки данных Бесплатно (free)

Директор и ведущий разработчик компании «Арт Порт» Максим Артеменко выступил на митапе, посвященном практике применения СКД. Максим рассказал о вариантах применения механизма настроек СКД для решения нестандартных задач – визуального оформления, сегментирования данных и автоматического заполнения примечаний к документам.

18.11.2021    3714    drmaxart    0    

42

Кейсы решения задач на СКД

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Разработчик 1С в компании Neti Александр Крынецкий выступил на Infostart Meetup, посвященном практике работы с СКД. Александр поделился с коллегами кейсами по решению сложных задач при работе с СКД.

08.11.2021    6174    echo77    7    

99

Грабли на СКД

СКД Платформа 1С v8.3 Система компоновки данных Россия Бесплатно (free)

Наиболее частые проблемы, с которыми сталкиваются программисты 1С при разработке отчетов на СКД.

02.11.2021    15173    echo77    17    

136

СКД: 5 советов, как сделать лучше

СКД Платформа 1С v8.3 Система компоновки данных 8.3.14 Бесплатно (free)

Несколько примеров решения задач с использованием разных подходов

27.10.2021    12540    Neti    19    

192

Программное открытие отчета СКД с параметрами и отбором

СКД Платформа 1С v8.3 Управляемые формы Система компоновки данных Бесплатно (free)

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

07.08.2021    29185    Eugen-S    35    

102

Объект "Схема запроса" и расширения языка запросов СКД

СКД Платформа 1С v8.3 Запросы Россия Бесплатно (free)

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

18.07.2021    3398    mysm    14    

27

Изменение расшифровки макета СКД до компоновки

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Это не про работу с данными расшифровки. Это про изменение расшифровок полей ДО того, как СКД выполнилась. Быстрый способ сделать нужные расшифровки.

12.07.2021    4351    Yashazz    7    

37

Формирование отчета СКД с расшифровкой из обработки

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Формирование отчета СКД из обработки немного отличается от формирования из отчета.

27.04.2021    6830    John_d    14    

74

Эффективные приемы разработки

Математика и алгоритмы Рефакторинг и качество кода СКД Платформа 1С v8.3 Бесплатно (free)

На Infostart Meetup Ekaterinburg.Online выступил Сергей Наумов – руководитель центра аналитики и консалтинга WiseAdvice. Сергей поделился с коллегами приемами разработки, которые помогут избежать потенциальных проблем при реализации сложных проектов.

07.04.2021    5332    SergeyN    13    

39

Полезные примеры СКД, ч.2

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Еще несколько примеров решения задач в СКД.

06.04.2021    18248    Neti    9    

215

Полезные примеры СКД, ч.1

СКД Система компоновки данных Бесплатно (free)

Подборка видео по решению различных задач в отчетах на СКД.

30.03.2021    23020    Neti    21    

364

Динамическая расшифровка СКД (на примере отчета)

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Предлагаю Вашему неподкупному вниманию вариант более-менее унифицированной реализации динамически формирующейся расшифровки СКД на примере простейшего отчета для конфигурации УТ 11.

1 стартмани

08.12.2020    3668    mr_sav    3    

23

Программная корректировка при выводе отчета СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

08.10.2020    25375    dabu-dabu    18    

238

Пользовательское поле СКД одной процедурой

СКД Платформа 1С v8.3 Бесплатно (free)

Быстрое создание пользовательского поля "выражение" одной процедурой

05.08.2020    3167    Yashazz    0    

23

Быстрое формирование наборов данных Объект схемы СКД

СКД Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

05.07.2020    12649    8    Алексей Воробьев    16    

56

Роль "Остатки" поля набора данных СКД в отчете и в расшифровке

СКД Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

24.05.2020    13342    kasper076    19    

26

СКД. Использование Менеджера временных таблиц в системе компоновки

СКД Платформа 1С v8.3 Запросы Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

29.04.2020    20097    ixijixi    50    

112

Ограничения полей, или как обмануть СКД?

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Каждое из ограничений полей можно обойти. Рассмотрим варианты обхода и способы обезопасить свой отчет.

15.04.2020    28925    SeiOkami    43    

125

Работа с запросами в 1С СКД. Отладка СКД

СКД Запросы Система компоновки данных Россия Бесплатно (free)

В предыдущем разделе мы изучали с вами особенности работы с запросами в СКД. Для изучения (отладки) работы различных схем компоновки данных я использовал консоль компоновки данных.

15.04.2020    7512    ProgrammingStore    3    

33

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 3

СКД Запросы Система компоновки данных Россия Бесплатно (free)

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

13.04.2020    12762    ProgrammingStore    5    

51

СКД: Прозрачная обработка результата

СКД Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

В статье дан ответ на вопрос о том, как "прозрачно" обработать результат компоновки (да хотя бы картинки вставить после того, как отчет сформирован).

13.04.2020    7880    starik-2005    17    

45