Программная работа с настройками СКД

27.01.20

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

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

Ни у кого не вызывает сомнений необходимость научиться работать с отчетами на СКД и динамическими списками программно. На эту тему написано много хороших статей. Вот некоторые из них:

Пример создания отчета на СКД полностью программно

Все возможные варианты вывода картинок в отчет на СКД

Процедура ПриКомпоновкиРезультата

Сложность здесь заключается не сколько в самом алгоритме программного формирования отчета – он достаточно простой и неоднократно описан:

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

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

Я рассмотрю нюансы программной работы с настройками компоновки в целом и конкретно работу с отборами. Отборы - это наиболее распространенный вариант программной работы с отчетами или с динамическим списком. 

Прежде чем перейти к практике, как всегда, немного теории. Для тех, кто в теме, и хорошо все это знает, переходите сразу к следующему разделу.

 

Немного теории…

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

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

Компоновщик настроек

Как видим, существует аж три различных раздела настроек:

  • Настройки
  • Пользовательские настройки
  • Фиксированные настройки  

У тех, кто только начинает осваивать СКД это может вызвать недоумение. И это вполне понятно. Почему бы не сделать только один вариант настроек и не работать с ним?

Ну что же, вполне резонный вопрос. Как минимум, сильно упростилась бы работа с этим объектом.

Но разработчики 1С так не думают. На сколько это оправдано – сказать сложно. В любом случае нам остается только принимать то, что есть, разбираться в этом и искать положительные стороны, которые безусловно есть.

И так разберем по порядку все варианты настроек. Как Вы увидите позже, это очень важно понимать для ПРАВИЛЬНОЙ работы с ними.  

Замечу еще раз, что все что будет сказано, справедливо как для отчетов так и для динамических списков.

Настройки компоновщика настроек

 

Настройки

Название говорит о том, что это основные настройки компоновки. Это так и есть. Собственно, открывая конструктор схемы компоновки в конфигураторе или в 1С-предприятии (в режиме толстого клиента) на закладке «Настройки» мы видим и работаем именно с этим вариантом настроек. То-есть при интерактивной работе мы работаем с Настройками компоновки данных.

Подробное описание интерактивной работы с настройками компоновки читайте в статье Работа с настройками системы компоновки.

Тип Настроек компоновки данных - «НастройкиКомпоновкиДанных». Настройки содержат в себе отдельные разделы для работы с отборами, параметрами, порядком, структурой, условным оформлением: 

Настройки компоновки

Пользовательские настройки

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

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

Не смотря на то, что Пользовательские настройки это подмножество Настроек, для программной работы с ними используется отдельный раздел компоновщика настроек. Более того, его тип - «ПользовательскиеНастройкиКомпоновкиДанных», который отличается от типа Настроек.

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

Пользовательские настройки

Для связи элемента Настроек и Пользовательских настроек существует специальный реквизит Настроек «ИдентификаторПользовательскийНастройки». Собственно для программного включения элемента настроек в пользовательские настройки, достаточно установить для него идентификатор пользовательской настройки:

ЭлементОтбораВНастройках.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор; 

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

Слияние настроек

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

 

Фиксированные настройки

А это уже отдельный, не связанный с другими, вариант настроек. Предполагается, что Фиксированные настройки не доступны для интерактивного редактирования ни в конфигураторе ни в 1С-предприятии. Это не совсем так. Вы можете добавить на форму отчета или динамического списка раздел «Отбор» фиксированных настроек. Это даст возможность редактировать их в пользовательском режиме.

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

Еще одно отличие от Настроек и Пользовательских настроек заключается в том, что Фиксированные настройки применяются ко всем вариантам отчета.

Важно иметь в виду, что при наложении Фиксированных настроек и Настроек или Пользовательских настроек будет вызвано исключение:

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

 

Доступ к настройкам в процедуре модуля отчета «ПриКомпоновкеРезультата»

В процедуре «ПриКомпоновкеРезультата», можно получить доступ к настройкам через схему компоновки или компоновщик настроек. Получить настройки можно следующим образом:

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

КомпоновщикНастроек.ПолучитьНастройки() – результирующие настройки, которые получены путем совмещения Настроек, Пользовательских настроек и Фиксированных настроек.

Также через компоновщик можно получить непосредственно тот или иной вариант настроек (Пользовательские, Фиксированные…).

То-есть, для программной работы с настройками в процедуре «ПриКомпоновкиРезультата» можно работать с настройками, заданными по умолчанию, отдельно с каким-либо видом настроек либо с результирующими настройками.

Следует иметь в виду, что если используются результирующие настройки и отчет формируется стандартным способом, необходимо загрузить исправленные результирующие настройки обратно в компоновщик настроек:

КомпоновщикНастроек.ЗагрузитьНастройки(СкорректированныеНастройки);

 

Программная работа с отборами

Наиболее частый вариант программной работы с настройками компоновки - это работа с отборами.

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

 

Отбор может быть изменен пользователями в настройках

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

Вариант 1. Отбор целиком добавлен в пользовательские настройки:

ОтборНастройки = Отчет.КомпоновщикНастроек.Настройки.Отбор;

//Поиск элемента пользовательских настроек по уникальному идентификатору раздела настроек 
ОтборПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ОтборНастройки.ИдентификаторПользовательскойНастройки);
ОтборПоСкладу = Неопределено;
ПолеКомпоновкиСклад = Новый ПолеКомпоновкиДанных("Склад");

//Поиск еже созданного ранее элемента отбора	
Для каждого ЭлементОтбора Из ОтборПользовательскиеНастройки.Элементы Цикл
   Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных")
             и ЭлементОтбора.ЛевоеЗначение = ПолеКомпоновкиСклад Тогда
      ОтборПоСкладу = ЭлементОтбора;
      Прервать;
   КонецЕсли;	
КонецЦикла;

//Создание нового элемента отбора в пользовательских настройках	
Если ОтборПоСкладу = Неопределено Тогда
   ОтборПоСкладу = ОтборПользовательскиеНастройки.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
   ОтборПоСкладу.ЛевоеЗначение = ПолеКомпоновкиСклад;
   ОтборПоСкладу.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
  
   //Для вывода отбора в быстром доступе необходимо обязательно назначить идентификатор пользовательской настройки
   ОтборПоСкладу.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор;
   СоздатьЭлементыФормыПользовательскихНастроек();
КонецЕсли;
	
ОтборПоСкладу.Использование = Истина;
ОтборПоСкладу.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборПоСкладу.ПравоеЗначение = Склад;

 

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

В пользовательском режиме, отбор будет доступен в форме отчета (так как указан режим отображения - быстрый доступ) и на закладке «Отбор»:

Отбор в пользовательских настройках

 

Вариант 2. Отбор добавлен в настройках и включен в пользовательские настройки как отдельный элемент:

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

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

В пользовательском режиме отбор будет виден только на первой закладке настроек. На закладке «Отбор» его не будет:

Отбор в настройках

 

Отбор может быть изменен пользователями только при корректировке варианта отчета   

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

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

Здесь есть один важный момент. Вся закладка отборы не должна быть включены в пользовательские настройки. Иначе отбор работать не будет, так как он будет «перебиваться» отбором в Пользовательских настройках, который не установлен.

В пользовательском режиме отбор будет доступен только при корректировке варианта отчета:

Отбор в настройках 2

А что же будет, если режим отображения отбора сделать недоступным?

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

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

Но отличие все-таки есть. Как уже было написано выше, отборы из Настроек с режимом отображения «Недоступный», не замещаются Пользовательскими настройками. То-есть если весь раздел «Отбор» включен в Пользовательские настройки, недоступный отбор в Настройках будет работать корректно.

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

 

Отбор не может быть изменен пользователями:

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

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

 Слияние фиксированных настроек

 

БСП нам в помощь

В современных конфигурациях можно использовать типовую процедуру из БСП:  

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

Параметр «НастройкиКомпоновки» может принимать значение следующих типов:

  • КомпоновщикНастроекКомпоновкиДанных,
  • НастройкиКомпоновкиДанных,
  • ОтборКомпоновкиДанных.

В случае, если передан компоновщик настроек, есть возможность добавить отбор как в Настройки так и в Пользовательские настройки.

К сожалению нет возможности добавить добавленный отбор в быстрый доступ или сделать отбор недоступным.

 

Работа с остальными настройками

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

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

Добавление группировок в Настройки:

Группировки = Список.КомпоновщикНастроек.Настройки.Структура;
Группировки.Очистить();
Группировка1 = Группировки.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ПолеГруппировки = Группировка1.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Группировка1");

//Создание второй группировки в структуре первой 	
Группировка2 = Группировка1.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ПолеГруппировки = Группировка2.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Группировка2");

 

Добавление группировок в Пользовательские настройки:

СтруктураНастройки = Отчет.КомпоновщикНастроек.Настройки.Структура;

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

Группировки = СтруктураПользовательскиеНастройки.Структура;
Группировки.Очистить();
Группировка1 = Группировки.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ПолеГруппировки = Группировка1.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Группировка1");
	
Группировка2 = Группировки.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ПолеГруппировки = Группировка2.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Группировка2");

Что же касается Фиксированных настроек, описание на этот счет никакого нет. Опыты показывают, что группировки добавленные в фиксированные настройки никак не влияют на результирующую структуру.

На этом все, спасибо за внимание. Успехов Вам в программной работе с СКД!

Для ознакомления с предыдущими моими статьями по СКД можно перейти по ссылкам ниже:

программная работа настройки СКД отбор группировка настроек

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 руб.

02.09.2020    118068    644    389    

692

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

3 стартмани

05.02.2024    3660    17    obmailok    17    

61

Набор-объект для СКД по тексту или запросу

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

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    1876    2    Yashazz    0    

28

СКД на JavaScript в 1С

СКД WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

11.12.2023    7773    19    John_d    25    

121

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

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

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

05.12.2023    4371    PROSTO-1C    13    

61

Модель СКД

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

DSL для работы с СКД.

1 стартмани

15.11.2023    5560    14    kalyaka    5    

85

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Простые приемы работы с отчетами на СКД. Что нужно знать пользователю про настройку отчетов, чтобы использовать их на полную катушку.

18.09.2023    5791    accounting_cons    4    

29

Разрыв страницы в СКД. Легко!

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

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

01.09.2023    4280    KVIKS    15    

79
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. uno-c 234 27.01.20 20:39 Сейчас в теме
Не сразу нашел место, чтобы поставить плюс. Обычно это оранжевый квадратик, который сразу видно. А тут нечто серое, едва заметное, потому что еще никто не плюсовал )
user958854; onsi; Alia777; ids79; +4 Ответить
2. user623969_dusa 28.01.20 08:14 Сейчас в теме
друзей корректоров нет ладно в тексте но в заголовке
"немного теориии" немного в смысле наречия мало пишется слитно
3. json 3289 28.01.20 08:21 Сейчас в теме
А знает кто-нибудь зачем в пользовательских настройках есть методы Добавить() и Вставить() ?
Добавление то происходит через присвоение идентификатора пользовательской настройки для настройки.
Чисто интересно, зачем добавлены эти методы?
Которые, кстати, мне так и не удалось заставить работать (когда-то давно пробовал это сделать)
4. Kaval88 171 28.01.20 08:41 Сейчас в теме
А в чём новизна публикации? При необходимости можно всё найти в синтакс-помощнике.
5. json 3289 28.01.20 09:29 Сейчас в теме
(4) Все можно где-то найти.
Чем больше статей на сложные темы с разных точек зрения, тем меньше времени придется потратить, чтобы найти ответ в нужный момент.
Вроде очевидная логика, нет?
starik-2005; DELOVOYDOM; Nirodaz; Krio2; EvaMendes; user1924333; azmon; catsam; Bob_Dobr; awp234; userMKA; Saioko; Ignatov_mu; kaaasteeen; user1456614; eufes; Gvenor; NatalkaBal; user847517; west__; spanielka; KpecT; o.nikolaev; nadi_bar; logarifm; ids79; aspirin4eg; +27 1 Ответить
6. VmvLer 28.01.20 09:51 Сейчас в теме
(4) согласен хотелось бы подробностей об областях знаний которые мало кем исследованы, например анализ данных и прочие области с нулевым опытом у 99% спецов.

а эта статья - простая компиляция известных всем фактов, может быть полезна очень ленивым новичкам которые открыли для себя адинэс сегодня у уже хотят получать 100500.
lunjio; user1274438; Kaval88; +3 7 Ответить
9. aspirin4eg 28.01.20 11:59 Сейчас в теме
(6) Эта статья представляет из себя выжимку и структурированный материал, который позволяет упорядочить разрозненные данные из множества разделов СП и документации. Если бы все можно было "просто почитать", преподаватели с университетами были бы не нужны. Такие статьи тоже важны и нужны и, если они не нужны Вам лично, это не повод кричать, что статья "проходняк". В конце-концов Вы тоже были когда-то "ленивым-новичком" у которого было миллион вопросов.
Krio2; user1924333; Artem-B; catsam; Bob_Dobr; SanchoD; voneska7; Ignatov_mu; kaaasteeen; happy-anvar; eufes; Gvenor; user847517; maximmar; RedIn; Aggressorak; o.nikolaev; JustaUser; nekit_rdx; ids79; +20 Ответить
13. json 3289 29.01.20 07:45 Сейчас в теме
(6) а откуда тебе знать, что нужно 99%-м спецов?
Ты хоть с одним из них общался?

Ты можешь говорить только за диванных спецов, и причем только за одного.

У тебя 99% комментариев о том, что тебя что-то не устраивает.
Этот комментарий не исключение.

Вот если бы ты на деле показал, что действительно в чем-то разбираешься, написав об этом статью.
То тогда можно было бы с тобой о чем-то поговорить
Artem-B; SanchoD; Ignatov_mu; hoyo; kaaasteeen; BomjBandit; ids79; ixijixi; +8 1 Ответить
15. VmvLer 29.01.20 09:37 Сейчас в теме
(13) смысл балоболить, помню во времена расцвета 77 когда франчевая поросль покоряла страну спецы(без кавычек) завели моду ходить по пивбарам и обсуждать там тонкости технологий, может и сейчас там пузо греют. Короче, я не любитель такого чеса, а попинать профана всегда пожалуйста.
чяднт?

если ваша картина мира другая, то и варитесь в в ней без истерик.
11. ids79 8255 28.01.20 20:28 Сейчас в теме
(4)А зачем вообще ИС? Ведь все можно найти в технической документации.
starik-2005; DELOVOYDOM; voneska7; Gvenor; egorious; nekit_rdx; logarifm; +7 1 Ответить
12. Kaval88 171 28.01.20 20:37 Сейчас в теме
(11)Вопрос про актуальность статьи, в 2010-2011 году было бы актуально, сейчас увы, тема заезжана.
14. json 3289 29.01.20 07:51 Сейчас в теме
(12) данная статья за один день набрала в полтора раза больше рейтинга, чем все твои публикации вместе взятые, начиная с 2016 года.
А по каким показателям судишь ты, говоря об актуальности?

Почему ты уверен, что более компетентен в данном вопросе, чем автор данной статьи?
DELOVOYDOM; 79123890854; voneska7; BomjBandit; o.nikolaev; Keldellar; +6 1 Ответить
16. VmvLer 29.01.20 09:40 Сейчас в теме
(14) тема просто попсовая и популярна у студентов и прочей ленивой братии, ну это как ток-шоу с Шурыгиной.
старички бухтят, ну она же такая-сякая, а молодняк плюсует "на доннышке"
НА ИС главное выбрать в тему попсу и плюсы обеспечены, причем истина не важна.
37. DELOVOYDOM 19.02.24 01:01 Сейчас в теме
(16) ну вот мне к примеру интересна тема, так как инвестирую крупные средства в направление 1С. Вы выйдите за пределы своего я и удивитесь как много разных людей вокруг и не оказались ли вы на донышке. Очень полезная статья
starik-2005; +1 Ответить
36. DELOVOYDOM 19.02.24 00:58 Сейчас в теме
(4) У нас что тут на инфостарте патентная служба? Я понимаю когда подавал заявку на изобретение, нужна была новизна и я защитил ее. Но здесь? Или Инфостарт существует специально под вашу судьбу, развитие, образование и все что вы знаете уже публиковать нельзя?
Господа комментаторы, уважайте других людей, которые делятся информацией с сообществом, тем более никогда не знаете кто тут сидит, может вы где то далеко внизу по сравнению с этими людьми в плане итогового результата) А именно выручки компании, собственного дохода, да и в целом успехов по жизни в том числе научных.
18. logarifm 1115 29.01.20 10:27 Сейчас в теме
(11)ага и еще можно найти на ИТС. А еще почему-то люди ленятся читать документацию БСП. У Вас хорошо выходит ее интерпритировать - продолжайте в этом же духе. Вот сейчас проект вообще конфигурацию с нуля на базе БСП - там есть много интересного , когда ты начинаешь все это сам прощупивать по каждой подсистеме. Вот все жду может кто решится написать статью относительно БСП 3, а самое главное - это изменение доступов и их еконтроля. Может у Вас будет к этому желание ;)
21. ids79 8255 30.01.20 08:52 Сейчас в теме
(18)У меня было несколько статей на тему прав доступа. Посмотрите, может быть это то, что Вам нужно.
22. logarifm 1115 30.01.20 11:03 Сейчас в теме
(21) интересует именно БСП 3. Уже есть может чего я пропустил?
25. user1194102 09.02.20 10:58 Сейчас в теме
(18) Хорошо демонстировать эрудированность за чужой счет, напишите сами подобную статью и сравним у кого более полезная получилась, мне например понравилась статья автора, не смогу по вашему совету зайти в БСП с нуля, так нет даже нуля от БСП, у меня УПП)
7. al_zzz 308 28.01.20 11:32 Сейчас в теме
Я - человек простой. Вижу очередную статью Дмитрия Иванова - плюсую!
nadi_bar; ids79; bulpi; +3 Ответить
8. aspirin4eg 28.01.20 11:53 Сейчас в теме
Спасибо за статью! Все очень подробно разжевано и структурировано. Многое, о чем знал или знал смутно, стало понятно, и смог в голове разложить по полочкам. Теперь СКД все менее представляется мне черным ящиком.
DELOVOYDOM; ids79; +2 Ответить
10. пользователь 28.01.20 12:33
(0) и еще одна отличная статья!

+
DELOVOYDOM; Roootru; o.nikolaev; davdykin; ids79; +5 Ответить
17. logarifm 1115 29.01.20 10:23 Сейчас в теме
(0) не читая + . Автор в адеквате всегда по теме то что надо пишет.
Flatra56; ids79; +2 Ответить
19. ixijixi 1752 29.01.20 10:38 Сейчас в теме
На заметку. Среди реквизитов динамического списка присутствуют элементы настроек компоновки

Прошу пардону, если ошибаюсь, но разве это корректное утверждение? Может, среди реквизитов компоновщика настроек динамического списка?
20. ids79 8255 30.01.20 07:34 Сейчас в теме
(19)Возможно не совсем корректно выразился. Я имел в виду, что они вынесены на один уровень с реквизитами динамического списка.
23. davdykin 25 30.01.20 20:50 Сейчас в теме
Отличная статья, большое спасибо за логичное и доступное изложение.
24. user1194102 09.02.20 10:52 Сейчас в теме
Статья хорошая спасибо, есть что посмотреть и поразбираться. Не могли бы вы выложить еще статью в продолжение к этой, как с помощью кода в скд вывести данные не в типовой макет скд "ОсновнаяСхемаКомпановки", а в произвольный макет (унифицированную форму) что-то типа счет или Счет фактура?
user1924333; Flatra56; o.nikolaev; ids79; +4 Ответить
26. Flyerink 5 27.02.20 16:08 Сейчас в теме
Спасибо за статью! Помогла разложить по полочкам отрывистые знания.
Особенно выручила инфа
КомпоновщикНастроек.ЗагрузитьНастройки(СкорректированныеНастройки);

Долго искал причину, почему мои программные настройки срабатывают после повторного формирования отчета...
Alia777; ids79; +2 Ответить
27. mikmike 8 30.11.21 15:57 Сейчас в теме
Спасибо Помогло. У меня правда все на обычных формах, но общий принцип сохранился.
28. Kitsunedie 11.07.22 15:03 Сейчас в теме
Здравствуйте. Пользовался вашей статьей для создания своего отчета. Начал кодить в 1С недавно и поэтому есть вопросы. Есть такой код
СтандартнаяОбработка = Ложь;
	СхемаСКД = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	КомпановщикМакетаКД = Новый КомпоновщикМакетаКомпоновкиДанных;
	НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
	ПарамПериод = НастройкиКомпоновки.ПараметрыДанных.Элементы.Найти("Период");
	
	Период = ПарамПериод.Значение;
	ДатаНач = Период.ДатаНачала;
	ДатаКон = Период.ДатаОкончания;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	
	"ВЫБРАТЬ
	|	ЗаказПоставщику.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.ЗаказПоставщику КАК ЗаказПоставщику
	|ГДЕ
	|	ЗаказПоставщику.Дата МЕЖДУ &ДатаНач И &ДатаКон";
	
	Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
	Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
	
	РезультатЗапроса = Запрос.Выполнить();
	тз = РезультатЗапроса.Выгрузить();
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	
	"ВЫБРАТЬ
	|	&Ссылка КАК ЗаказПоставщикуСсылка,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ПриобретениеТоваровУслуг
	|				ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ПриобретениеТоваровУслуг)
	|		КОНЕЦ) КАК ПриобретениеТоваровУслуг,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ЗаявкаНаРасходованиеДенежныхСредств
	|				ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ЗаявкаНаРасходованиеДенежныхСредств)
	|		КОНЕЦ) КАК ЗаявкаНаРасходованиеДенежныхСредств,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.СписаниеБезналичныхДенежныхСредств
	|				ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.СписаниеБезналичныхДенежныхСредств)
	|		КОНЕЦ) КАК СписаниеБезналичныхДенежныхСредств,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ПриобретениеУслугПрочихАктивов
	|				ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ПриобретениеУслугПрочихАктивов)
	|		КОНЕЦ) КАК ПриобретениеУслугПрочихАктивов,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ПриобретениеТоваровУслуг
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ПриобретениеТоваровУслуг).Проведен
	|	КОНЕЦ КАК ПриобретениеТоваровУслугПроведен,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ПриобретениеУслугПрочихАктивов
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ПриобретениеУслугПрочихАктивов).СуммаДокумента
	|	КОНЕЦ КАК ПриобретениеТоваровУслугСуммаДокумента,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ЗаявкаНаРасходованиеДенежныхСредств
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ЗаявкаНаРасходованиеДенежныхСредств).Проведен
	|	КОНЕЦ КАК ЗаявкаНаРасходованиеДенежныхСредствПроведен,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ЗаявкаНаРасходованиеДенежныхСредств
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ЗаявкаНаРасходованиеДенежныхСредств).СуммаДокумента
	|	КОНЕЦ КАК ЗаявкаНаРасходованиеДенежныхСредствСуммаДокумента,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.СписаниеБезналичныхДенежныхСредств
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.СписаниеБезналичныхДенежныхСредств).Проведен
	|	КОНЕЦ КАК СписаниеБезналичныхДенежныхСредствПроведен,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.СписаниеБезналичныхДенежныхСредств
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.СписаниеБезналичныхДенежныхСредств).СуммаДокумента
	|	КОНЕЦ КАК СписаниеБезналичныхДенежныхСредствСуммаДокумента,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ПриобретениеУслугПрочихАктивов
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ПриобретениеУслугПрочихАктивов).Проведен
	|	КОНЕЦ КАК ПриобретениеУслугПрочихАктивовПроведен,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ПриобретениеУслугПрочихАктивов
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ПриобретениеУслугПрочихАктивов).СуммаДокумента
	|	КОНЕЦ КАК ПриобретениеУслугПрочихАктивовСуммаДокумента,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.РасходныйКассовыйОрдер
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.РасходныйКассовыйОрдер)
	|	КОНЕЦ КАК РасходныйКассовыйОрдер,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.РасходныйКассовыйОрдер
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.РасходныйКассовыйОрдер).Проведен
	|	КОНЕЦ КАК РасходныйКассовыйОрдерПроведен,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.РасходныйКассовыйОрдер
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.РасходныйКассовыйОрдер).СуммаДокумента
	|	КОНЕЦ КАК РасходныйКассовыйОрдерСуммаДокумента
	|ПОМЕСТИТЬ ВТЗ
	|ИЗ
	|	КритерийОтбора.СвязанныеДокументы(&Ссылка) КАК СвязанныеДокументы
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеДенежныхСредств КАК ЗаявкаНаРасходованиеДенежныхСредств
	|		ПО СвязанныеДокументы.Ссылка = ЗаявкаНаРасходованиеДенежныхСредств.Ссылка
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваровУслуг
	|		ПО СвязанныеДокументы.Ссылка = ПриобретениеТоваровУслуг.Ссылка
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриобретениеУслугПрочихАктивов КАК ПриобретениеУслугПрочихАктивов
	|		ПО СвязанныеДокументы.Ссылка = ПриобретениеУслугПрочихАктивов.Ссылка
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.СписаниеБезналичныхДенежныхСредств КАК СписаниеБезналичныхДенежныхСредств
	|		ПО СвязанныеДокументы.Ссылка = СписаниеБезналичныхДенежныхСредств.Ссылка
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
	|		ПО СвязанныеДокументы.Ссылка = РасходныйКассовыйОрдер.Ссылка
	|ГДЕ
	|	(СвязанныеДокументы.Ссылка ССЫЛКА Документ.ПриобретениеТоваровУслуг
	|			ИЛИ СвязанныеДокументы.Ссылка ССЫЛКА Документ.ЗаявкаНаРасходованиеДенежныхСредств
	|			ИЛИ СвязанныеДокументы.Ссылка ССЫЛКА Документ.СписаниеБезналичныхДенежныхСредств
	|			ИЛИ СвязанныеДокументы.Ссылка ССЫЛКА Документ.ПриобретениеУслугПрочихАктивов)
	|	И НЕ СвязанныеДокументы.Ссылка = ЗНАЧЕНИЕ(Документ.ЗаявкаНаРасходованиеДенежныхСредств.ПустаяСсылка)
	|	И НЕ СвязанныеДокументы.Ссылка = ЗНАЧЕНИЕ(Документ.СписаниеБезналичныхДенежныхСредств.ПустаяСсылка)
	|	И НЕ СвязанныеДокументы.Ссылка = ЗНАЧЕНИЕ(Документ.ПриобретениеУслугПрочихАктивов.ПустаяСсылка)
	|
	|СГРУППИРОВАТЬ ПО
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ПриобретениеТоваровУслуг
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ПриобретениеТоваровУслуг).Проведен
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ПриобретениеУслугПрочихАктивов
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ПриобретениеУслугПрочихАктивов).СуммаДокумента
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ЗаявкаНаРасходованиеДенежныхСредств
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ЗаявкаНаРасходованиеДенежныхСредств).Проведен
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ЗаявкаНаРасходованиеДенежныхСредств
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ЗаявкаНаРасходованиеДенежныхСредств).СуммаДокумента
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.СписаниеБезналичныхДенежныхСредств
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.СписаниеБезналичныхДенежныхСредств).Проведен
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.СписаниеБезналичныхДенежныхСредств
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.СписаниеБезналичныхДенежныхСредств).СуммаДокумента
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ПриобретениеУслугПрочихАктивов
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ПриобретениеУслугПрочихАктивов).Проведен
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.РасходныйКассовыйОрдер
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.РасходныйКассовыйОрдер)
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.РасходныйКассовыйОрдер
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.РасходныйКассовыйОрдер).Проведен
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.РасходныйКассовыйОрдер
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.РасходныйКассовыйОрдер).СуммаДокумента
	|	КОНЕЦ,
	|	ВЫБОР
	|		КОГДА СвязанныеДокументы.Ссылка ССЫЛКА Документ.ПриобретениеУслугПрочихАктивов
	|			ТОГДА ВЫРАЗИТЬ(СвязанныеДокументы.Ссылка КАК Документ.ПриобретениеУслугПрочихАктивов).СуммаДокумента
	|	КОНЕЦ
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ВТЗ.ЗаказПоставщикуСсылка КАК ЗаказПоставщикуСсылка,
	|	ЕСТЬNULL(ВТЗ.ПриобретениеТоваровУслуг, ЗНАЧЕНИЕ(Документ.ПриобретениеТоваровУслуг.ПустаяСсылка)) КАК ПриобретениеТоваровУслуг,
	|	ВТЗ.ЗаявкаНаРасходованиеДенежныхСредств КАК ЗаявкаНаРасходованиеДенежныхСредств,
	|	ВТЗ.СписаниеБезналичныхДенежныхСредств КАК СписаниеБезналичныхДенежныхСредств,
	|	ВТЗ.ПриобретениеУслугПрочихАктивов КАК ПриобретениеУслугПрочихАктивов,
	|	ВТЗ.ПриобретениеТоваровУслугПроведен КАК ПриобретениеТоваровУслугПроведен,
	|	ВТЗ.ПриобретениеТоваровУслугСуммаДокумента КАК ПриобретениеТоваровУслугСуммаДокумента,
	|	ВТЗ.ЗаявкаНаРасходованиеДенежныхСредствПроведен КАК ЗаявкаНаРасходованиеДенежныхСредствПроведен,
	|	ВТЗ.ЗаявкаНаРасходованиеДенежныхСредствСуммаДокумента КАК ЗаявкаНаРасходованиеДенежныхСредствСуммаДокумента,
	|	ВТЗ.СписаниеБезналичныхДенежныхСредствПроведен КАК СписаниеБезналичныхДенежныхСредствПроведен,
	|	ВТЗ.СписаниеБезналичныхДенежныхСредствСуммаДокумента КАК СписаниеБезналичныхДенежныхСредствСуммаДокумента,
	|	ВТЗ.ПриобретениеУслугПрочихАктивовПроведен КАК ПриобретениеУслугПрочихАктивовПроведен,
	|	ВТЗ.ПриобретениеУслугПрочихАктивовСуммаДокумента КАК ПриобретениеУслугПрочихАктивовСуммаДокумента,
	|	ВТЗ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер,
	|	ВТЗ.РасходныйКассовыйОрдерПроведен КАК РасходныйКассовыйОрдерПроведен,
	|	ВТЗ.РасходныйКассовыйОрдерСуммаДокумента КАК РасходныйКассовыйОрдерСуммаДокумента,
	|	ЗаказПоставщику.Партнер КАК ЗаказПоставщикуПартнер,
	|	ЗаказПоставщику.Статус КАК ЗаказПоставщикуСтатус,
	|	ЗаказПоставщику.Проведен КАК ЗаказПоставщикуПроведен,
	|	ЗаказПоставщику.СуммаДокумента КАК ЗаказПоставщикуСуммаДокумента,
	|	ЗаказПоставщику.Комментарий КАК ЗаказПоставщикуКомментарий
	|ИЗ
	|	ВТЗ КАК ВТЗ
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику
	|		ПО ВТЗ.ЗаказПоставщикуСсылка = ЗаказПоставщику.Ссылка";
	
	ИтогТЗ = Новый ТаблицаЗначений;
	ИтогТЗ.Колонки.Добавить("ЗаказПоставщикуСсылка");
	ИтогТЗ.Колонки.Добавить("ПриобретениеТоваровУслуг");
	ИтогТЗ.Колонки.Добавить("ЗаявкаНаРасходованиеДенежныхСредств");
	ИтогТЗ.Колонки.Добавить("СписаниеБезналичныхДенежныхСредств");
	ИтогТЗ.Колонки.Добавить("ПриобретениеУслугПрочихАктивов");
	ИтогТЗ.Колонки.Добавить("ПриобретениеТоваровУслугПроведен");
	ИтогТЗ.Колонки.Добавить("ПриобретениеТоваровУслугСуммаДокумента");
	ИтогТЗ.Колонки.Добавить("ЗаявкаНаРасходованиеДенежныхСредствПроведен");
	ИтогТЗ.Колонки.Добавить("ЗаявкаНаРасходованиеДенежныхСредствСуммаДокумента");
	ИтогТЗ.Колонки.Добавить("СписаниеБезналичныхДенежныхСредствПроведен");
	ИтогТЗ.Колонки.Добавить("СписаниеБезналичныхДенежныхСредствСуммаДокумента");
	ИтогТЗ.Колонки.Добавить("РасходныйКассовыйОрдер");
	ИтогТЗ.Колонки.Добавить("РасходныйКассовыйОрдерПроведен");
	ИтогТЗ.Колонки.Добавить("РасходныйКассовыйОрдерСуммаДокумента");
	ИтогТЗ.Колонки.Добавить("ЗаказПоставщикуПартнер");
	ИтогТЗ.Колонки.Добавить("ЗаказПоставщикуСтатус");
	ИтогТЗ.Колонки.Добавить("ЗаказПоставщикуПроведен");
	ИтогТЗ.Колонки.Добавить("ЗаказПоставщикуСуммаДокумента");
	ИтогТЗ.Колонки.Добавить("ЗаказПоставщикуКомментарий");
	ИтогТЗ.Колонки.Добавить("ПриобретениеУслугПрочихАктивовПроведен");
	ИтогТЗ.Колонки.Добавить("ПриобретениеУслугПрочихАктивовСуммаДокумента");
	
	Для каждого Строка из тз Цикл
		
		Запрос.УстановитьПараметр("Ссылка", Строка.Ссылка);
		ТЗДок = Запрос.Выполнить().Выгрузить();
		
		Для каждого СтрокаТЗДок Из ТЗдок Цикл
			СтрокаИтогТЗ = ИтогТЗ.Добавить();
			ЗаполнитьЗначенияСвойств(СтрокаИтогТЗ, СтрокаТЗДОК);
		КонецЦикла;
		
	КонецЦикла;
	
	Итог = Новый ТаблицаЗначений;
	Итог.Колонки.Добавить("ЗаказПоставщикуСсылка");
	Итог.Колонки.Добавить("ПриобретениеТоваровУслуг");
	Итог.Колонки.Добавить("ЗаявкаНаРасходованиеДенежныхСредств");
	Итог.Колонки.Добавить("СписаниеБезналичныхДенежныхСредств");
	Итог.Колонки.Добавить("ПриобретениеУслугПрочихАктивов");
	Итог.Колонки.Добавить("ПриобретениеТоваровУслугПроведен");
	Итог.Колонки.Добавить("ПриобретениеТоваровУслугСуммаДокумента");
	Итог.Колонки.Добавить("ЗаявкаНаРасходованиеДенежныхСредствПроведен");
	Итог.Колонки.Добавить("ЗаявкаНаРасходованиеДенежныхСредствСуммаДокумента");
	Итог.Колонки.Добавить("СписаниеБезналичныхДенежныхСредствПроведен");
	Итог.Колонки.Добавить("СписаниеБезналичныхДенежныхСредствСуммаДокумента");
	Итог.Колонки.Добавить("РасходныйКассовыйОрдер");
	Итог.Колонки.Добавить("РасходныйКассовыйОрдерПроведен");
	Итог.Колонки.Добавить("РасходныйКассовыйОрдерСуммаДокумента");
	Итог.Колонки.Добавить("ЗаказПоставщикуПартнер");
	Итог.Колонки.Добавить("ЗаказПоставщикуСтатус");
	Итог.Колонки.Добавить("ЗаказПоставщикуПроведен");
	Итог.Колонки.Добавить("ЗаказПоставщикуСуммаДокумента");
	Итог.Колонки.Добавить("ЗаказПоставщикуКомментарий");
	Итог.Колонки.Добавить("ПриобретениеУслугПрочихАктивовПроведен");
	Итог.Колонки.Добавить("ПриобретениеУслугПрочихАктивовСуммаДокумента");
	
	СчетчикИтогТЗ = 0;
	СчетчикИтог = Неопределено;
	
	Для каждого Строка из ИтогТЗ Цикл
		СчетчикИтогТЗ = СчетчикИтогТЗ + 1;
		Если СчетчикИтог = Неопределено Тогда
			СчетчикИтогТЗ = СчетчикИтогТЗ;
			НоваяСтрока = Итог.Добавить();
			СчетчикИтог = 0;
			НоваяСтрока.ЗаказПоставщикуСсылка = Строка.ЗаказПоставщикуСсылка;
			НоваяСтрока.ЗаказПоставщикуПартнер = Строка.ЗаказПоставщикуПартнер;
			НоваяСтрока.ЗаказПоставщикуСтатус = Строка.ЗаказПоставщикуСтатус;
		    НоваяСтрока.ЗаказПоставщикуПроведен = Строка.ЗаказПоставщикуПроведен;
		    НоваяСтрока.ЗаказПоставщикуСуммаДокумента = Строка.ЗаказПоставщикуСуммаДокумента;
			НоваяСтрока.ЗаказПоставщикуКомментарий = Строка.ЗаказПоставщикуКомментарий;
			Если НЕ Строка.ПриобретениеТоваровУслуг = Документы.ПриобретениеТоваровУслуг.ПустаяСсылка() Тогда
				НоваяСтрока.ПриобретениеТоваровУслуг = Строка.ПриобретениеТоваровУслуг;
				НоваяСтрока.ПриобретениеТоваровУслугПроведен = Строка.ПриобретениеТоваровУслугПроведен;
				НоваяСтрока.ПриобретениеТоваровУслугСуммаДокумента = Строка.ПриобретениеТоваровУслугСуммаДокумента;
			ИначеЕсли НЕ Строка.ЗаявкаНаРасходованиеДенежныхСредств = Документы.ЗаявкаНаРасходованиеДенежныхСредств.ПустаяСсылка() Тогда
				НоваяСтрока.ЗаявкаНаРасходованиеДенежныхСредств = Строка.ЗаявкаНаРасходованиеДенежныхСредств;
				НоваяСтрока.ЗаявкаНаРасходованиеДенежныхСредствПроведен = Строка.ЗаявкаНаРасходованиеДенежныхСредствПроведен;
				НоваяСтрока.ЗаявкаНаРасходованиеДенежныхСредствСуммаДокумента = Строка.ЗаявкаНаРасходованиеДенежныхСредствСуммаДокумента;
			ИначеЕсли НЕ Строка.СписаниеБезналичныхДенежныхСредств =  Документы.СписаниеБезналичныхДенежныхСредств.ПустаяСсылка() Тогда
				НоваяСтрока.СписаниеБезналичныхДенежныхСредств = Строка.СписаниеБезналичныхДенежныхСредств;
				НоваяСтрока.СписаниеБезналичныхДенежныхСредствПроведен = Строка.СписаниеБезналичныхДенежныхСредствПроведен;
				НоваяСтрока.СписаниеБезналичныхДенежныхСредствСуммаДокумента = Строка.СписаниеБезналичныхДенежныхСредствСуммаДокумента;
			ИначеЕсли НЕ Строка.ПриобретениеУслугПрочихАктивов = Документы.ПриобретениеУслугПрочихАктивов.ПустаяСсылка() Тогда
				НоваяСтрока.ПриобретениеУслугПрочихАктивов = Строка.ПриобретениеУслугПрочихАктивов;
				НоваяСтрока.ПриобретениеУслугПрочихАктивовПроведен = Строка.ПриобретениеУслугПрочихАктивовПроведен;
				НоваяСтрока.ПриобретениеУслугПрочихАктивовСуммаДокумента = Строка.ПриобретениеУслугПрочихАктивовСуммаДокумента;
			ИначеЕсли НЕ Строка.РасходныйКассовыйОрдер = Документы.РасходныйКассовыйОрдер.ПустаяСсылка() Тогда
				НоваяСтрока.РасходныйКассовыйОрдер = Строка.РасходныйКассовыйОрдер;
				НоваяСтрока.РасходныйКассовыйОрдерПроведен = Строка.РасходныйКассовыйОрдерПроведен;
				НоваяСтрока.РасходныйКассовыйОрдерСуммаДокумента = Строка.РасходныйКассовыйОрдерСуммаДокумента;
			КонецЕсли;
		Иначе
			Если Итог[СчетчикИтог].ЗаказПоставщикуСсылка = ИтогТЗ[СчетчикИтогТЗ-1].ЗаказПоставщикуСсылка Тогда
				Если НЕ Строка.ПриобретениеТоваровУслуг = Документы.ПриобретениеТоваровУслуг.ПустаяСсылка() Тогда
					НоваяСтрока.ПриобретениеТоваровУслуг = Строка.ПриобретениеТоваровУслуг;
					НоваяСтрока.ПриобретениеТоваровУслугПроведен = Строка.ПриобретениеТоваровУслугПроведен;
					НоваяСтрока.ПриобретениеТоваровУслугСуммаДокумента = Строка.ПриобретениеТоваровУслугСуммаДокумента;
				ИначеЕсли НЕ Строка.ЗаявкаНаРасходованиеДенежныхСредств = Документы.ЗаявкаНаРасходованиеДенежныхСредств.ПустаяСсылка() Тогда
					НоваяСтрока.ЗаявкаНаРасходованиеДенежныхСредств = Строка.ЗаявкаНаРасходованиеДенежныхСредств;
					НоваяСтрока.ЗаявкаНаРасходованиеДенежныхСредствПроведен = Строка.ЗаявкаНаРасходованиеДенежныхСредствПроведен;
					НоваяСтрока.ЗаявкаНаРасходованиеДенежныхСредствСуммаДокумента = Строка.ЗаявкаНаРасходованиеДенежныхСредствСуммаДокумента;
				ИначеЕсли НЕ Строка.СписаниеБезналичныхДенежныхСредств =  Документы.СписаниеБезналичныхДенежныхСредств.ПустаяСсылка() Тогда
					НоваяСтрока.СписаниеБезналичныхДенежныхСредств = Строка.СписаниеБезналичныхДенежныхСредств;
					НоваяСтрока.СписаниеБезналичныхДенежныхСредствПроведен = Строка.СписаниеБезналичныхДенежныхСредствПроведен;
					НоваяСтрока.СписаниеБезналичныхДенежныхСредствСуммаДокумента = Строка.СписаниеБезналичныхДенежныхСредствСуммаДокумента;
				ИначеЕсли НЕ Строка.ПриобретениеУслугПрочихАктивов = Документы.ПриобретениеУслугПрочихАктивов.ПустаяСсылка() Тогда
					НоваяСтрока.ПриобретениеУслугПрочихАктивов = Строка.ПриобретениеУслугПрочихАктивов;
					НоваяСтрока.ПриобретениеУслугПрочихАктивовПроведен = Строка.ПриобретениеУслугПрочихАктивовПроведен;
					НоваяСтрока.ПриобретениеУслугПрочихАктивовСуммаДокумента = Строка.ПриобретениеУслугПрочихАктивовСуммаДокумента;
				ИначеЕсли НЕ Строка.РасходныйКассовыйОрдер = Документы.РасходныйКассовыйОрдер.ПустаяСсылка() Тогда
					НоваяСтрока.РасходныйКассовыйОрдер = Строка.РасходныйКассовыйОрдер;
					НоваяСтрока.РасходныйКассовыйОрдерПроведен = Строка.РасходныйКассовыйОрдерПроведен;
					НоваяСтрока.РасходныйКассовыйОрдерСуммаДокумента = Строка.РасходныйКассовыйОрдерСуммаДокумента;
				КонецЕсли;
			Иначе
			  	НоваяСтрока = Итог.Добавить();
				СчетчикИтог = СчетчикИтог + 1;
				НоваяСтрока.ЗаказПоставщикуСсылка = Строка.ЗаказПоставщикуСсылка;
				НоваяСтрока.ЗаказПоставщикуПартнер = Строка.ЗаказПоставщикуПартнер;
				НоваяСтрока.ЗаказПоставщикуСтатус = Строка.ЗаказПоставщикуСтатус;
			    НоваяСтрока.ЗаказПоставщикуПроведен = Строка.ЗаказПоставщикуПроведен;
			    НоваяСтрока.ЗаказПоставщикуСуммаДокумента = Строка.ЗаказПоставщикуСуммаДокумента;
				НоваяСтрока.ЗаказПоставщикуКомментарий = Строка.ЗаказПоставщикуКомментарий;
				Если НЕ Строка.ПриобретениеТоваровУслуг = Документы.ПриобретениеТоваровУслуг.ПустаяСсылка() Тогда
					НоваяСтрока.ПриобретениеТоваровУслуг = Строка.ПриобретениеТоваровУслуг;
					НоваяСтрока.ПриобретениеТоваровУслугПроведен = Строка.ПриобретениеТоваровУслугПроведен;
					НоваяСтрока.ПриобретениеТоваровУслугСуммаДокумента = Строка.ПриобретениеТоваровУслугСуммаДокумента;
				ИначеЕсли НЕ Строка.ЗаявкаНаРасходованиеДенежныхСредств = Документы.ЗаявкаНаРасходованиеДенежныхСредств.ПустаяСсылка() Тогда
					НоваяСтрока.ЗаявкаНаРасходованиеДенежныхСредств = Строка.ЗаявкаНаРасходованиеДенежныхСредств;
					НоваяСтрока.ЗаявкаНаРасходованиеДенежныхСредствПроведен = Строка.ЗаявкаНаРасходованиеДенежныхСредствПроведен;
					НоваяСтрока.ЗаявкаНаРасходованиеДенежныхСредствСуммаДокумента = Строка.ЗаявкаНаРасходованиеДенежныхСредствСуммаДокумента;
				ИначеЕсли НЕ Строка.СписаниеБезналичныхДенежныхСредств =  Документы.СписаниеБезналичныхДенежныхСредств.ПустаяСсылка() Тогда
					НоваяСтрока.СписаниеБезналичныхДенежныхСредств = Строка.СписаниеБезналичныхДенежныхСредств;
					НоваяСтрока.СписаниеБезналичныхДенежныхСредствПроведен = Строка.СписаниеБезналичныхДенежныхСредствПроведен;
					НоваяСтрока.СписаниеБезналичныхДенежныхСредствСуммаДокумента = Строка.СписаниеБезналичныхДенежныхСредствСуммаДокумента;
				ИначеЕсли НЕ Строка.ПриобретениеУслугПрочихАктивов = Документы.ПриобретениеУслугПрочихАктивов.ПустаяСсылка() Тогда
					НоваяСтрока.ПриобретениеУслугПрочихАктивов = Строка.ПриобретениеУслугПрочихАктивов;
					НоваяСтрока.ПриобретениеУслугПрочихАктивовПроведен = Строка.ПриобретениеУслугПрочихАктивовПроведен;
					НоваяСтрока.ПриобретениеУслугПрочихАктивовСуммаДокумента = Строка.ПриобретениеУслугПрочихАктивовСуммаДокумента;
				ИначеЕсли НЕ Строка.РасходныйКассовыйОрдер = Документы.РасходныйКассовыйОрдер.ПустаяСсылка() Тогда
					НоваяСтрока.РасходныйКассовыйОрдер = Строка.РасходныйКассовыйОрдер;
					НоваяСтрока.РасходныйКассовыйОрдерПроведен = Строка.РасходныйКассовыйОрдерПроведен;
					НоваяСтрока.РасходныйКассовыйОрдерСуммаДокумента = Строка.РасходныйКассовыйОрдерСуммаДокумента;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;	
	
	СоответствиеТипов = ПолучитьСоответствиеТипов();

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


Есть результат его выполнения на скриншоте.
И собственно вопрос. Как при нажатии на Элемент колонки Заказ поставщику сделать переход по ссылке на документ.
В стандартных отчетах без программного скармливания таблицы значений в СКД все работает, а тут нет, видимо нужно что-то дописать. А как сформулировать правильно вопрос или где прочитать найти не могу. Был бы признателен какому-нибудь тонкому намеку в сторону решения.
Прикрепленные файлы:
29. ids79 8255 20.07.22 19:18 Сейчас в теме
(28) Добавьте данные расшифровки в метод Выполнить компоновщика макета:
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаСКД, НастройкиКомпоновки, ДанныеРасшифровки );
Kitsunedie; +1 Ответить
30. Kitsunedie 21.07.22 08:10 Сейчас в теме
(29)
Да, спасибо большое, уже нашел ошибку
31. user1826876 19.09.22 13:25 Сейчас в теме
Мне не помогло ничего, полдня бился, так и не смог сделать, что бы форма отчета открывалась с заданными отборами, компоновщик их получает, а на форме все это появляется только после второго запуска сформировать через форму настроек..
32. user1633475 06.07.23 05:20 Сейчас в теме
Вопрос, на который пока никто не ответил:
В параметрах есть "Период" типа "СтандартныйПериод" и "НачалоПериода" типа "Дата" с выражением "&Период.ДатаНачала", использование "Всегда", "Ограничение доступности"+. Если вытащить программно из настроек "Период" - там всё нормально. А вот если вытащить "НачалоПериода", то - пустая дата и "Использование":ложь. Логику я тут наблюдаю такую: на этом этапе обрабатываются параметры, выведенные в настройках варианта, а выражения на закладке "Параметры" СхемыКомпоновкиДанных (которая между "Ресурсы" и "Макеты") - обрабатываются как-то по-другому.
34. kalyaka 1047 18.10.23 23:49 Сейчас в теме
(32) У меня есть такая гипотеза. Дело в том, что в схеме описываются параметры с типом ПараметрСхемыКомпоновкиДанных, а в настройках указывается значение параметра с типом ЗначениеПараметраНастроекКомпоновкиДанных.

Получается в настройках указывается "Параметр компоновки данных" и его значение, т.е. связывается параметр схемы со значением. При этом значения параметров, вычисляемых в выражении, не задаются в настройках, а вычисляется непосредственно при инициализации процессора компоновки данных или при выводе макетов областей отчета.
35. kalyaka 1047 19.10.23 06:58 Сейчас в теме
(32) вычисленное значение можно увидеть в макете компоновки данных в свойстве ЗначенияПараметров. Макет получается как результат метода Выполнить в компоновщике макета. Здесь к схеме применяются настройки, формируется макет и вычисляются параметры.
33. Dimony4 3 18.10.23 22:05 Сейчас в теме
Спасибо!
В конфигурации в форме списка не был доступен отбор

Добавить эту возможность для пользователя, оказалось просто.
Одной стройкой кода в общем модуле
Форма.Список.КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки = Строка(новый УникальныйИдентификатор);
Оставьте свое сообщение