Программное заполнение пользовательских параметров и отборов СКД

13.08.20

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

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

1. Пользовательские настройки СКД


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

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

В общем случае, для того, чтобы открыть отчет с заполненными параметрами используется следующая конструкция:

ПараметрыОткрытия = Новый Структура();
ПараметрыОткрытия.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыОткрытия.Вставить("Вариант", КомпоновщикНастроек.Настройки);
ПараметрыОткрытия.Вставить("ПользовательскиеНастройки", КомпоновщикНастроек.ПользовательскиеНастройки);
ОткрытьФорму("Отчет.муОтчет.Форма.ФормаОтчета", ПараметрыОткрытия, ЭтаФорма, Истина);

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

1.1. Установка пользовательских параметров СКД

Для установки значения параметра обычно используется такая конструкция:

ПараметрКомпоновки = Новый ПараметрКомпоновкиДанных(ИмяПараметра);
ПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКомпоновки);
ПараметрСКД.Значение = Значение;
ПараметрСКД.Использование = Истина;

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

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

Если ЗначениеЗаполнено(ПараметрСКД.ИдентификаторПользовательскойНастройки) Тогда
	
	ПользовательскийПараметр = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(
	   ПараметрСКД.ИдентификаторПользовательскойНастройки);
	Если ТипЗнч(ПользовательскийПараметр) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
		ПользовательскийПараметр.Значение = ПараметрСКД.Значение;
	КонецЕсли;

КонецЕсли;

Данный код по значению идентификатора пользовательской настройки находит элемент этой настройки и устанавливает значение параметра еще и там.

1.2. Установка пользовательских отборов СКД

1.2.1. Пример открытия отчета с фиксированным отбором

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


Отбор.Вставить("Номенклатура", ОтборПоНоменклатуре);		
ПараметрыОткрытия = Новый Структура(); 	
ПараметрыОткрытия.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыОткрытия.Вставить("Отбор", Отбор);
ОткрытьФорму("Отчет.муОтчет.Форма.ФормаОтчета", ПараметрыОткрытия, ЭтаФорма, Истина);

В данном случае форма откроется с отбором, но отбор не будет доступен для редактирования.

1.2.2. Пример открытия отчета с пользовательским отбором

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

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

ЭлементОтбораПользовательский =  ПользовательскийОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

ЭлементОтбораПользовательский.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор();
ЭлементОтбораПользовательский.ВидСравнения = ВидСравнения;
ЭлементОтбораПользовательский.ЛевоеЗначение = ПолеКомпоновкиЭлемента;
ЭлементОтбораПользовательский.ПравоеЗначение = Значение;
ЭлементОтбораПользовательский.Использование = Истина;

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

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

Если пользовательские отборы нужно объединить в группу отборов ("И", "Или", "Не"), тогда нужно сначала добавить группу пользовательского отбора:

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

//Убрано для того, чтобы группа не показывалась на форме и в основных настройках, а была только на вкладке "Отбор"
//ГруппаОтбора.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор();

У группы отборов есть свойство "Элементы", чтобы элемент отбора был подчинен данной группе (находился в этой группе) Отбор нужно добавлять именно в эту группу.

Т.е. вместо

ЭлементОтбораПользовательский =  ПользовательскийОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

Будет

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

Обновлено 13.08.2020

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


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

КонецПроцедуры


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

КонецФункции


&НаКлиенте
Процедура ОткрытьОтчет(Команда)
	
	ИмяОтчета = "ЗадолженностьКлиентов";
	
	ПараметрыОткрытия = ПолучитьПараметрыОткрытияОтчета(ИмяОтчета, ЭтотОбъект.Партнер);
	ОткрытьФорму("Отчет." + ИмяОтчета + ".ФормаОбъекта", ПараметрыОткрытия, ЭтотОбъект);
	
КонецПроцедуры

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

1.2.3. Пример открытия отчета с пользовательским отбором (форма отчета из БСП)

Указанные выше способ не дает желаемого результата в конфигурациях, где используется не типовая форма отчета, а форма из БСП (Тестирование проводилось на конфигурации 1С:Комплексная автоматизация 2 (2.4.12.64)).

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


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

	ЭлементОтбора.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор();
	ЭлементОтбора.ВидСравнения = ВидСравнения;
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля);
	ЭлементОтбора.ПравоеЗначение = Значение;
	ЭлементОтбора.Использование = Истина;

КонецПроцедуры


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

КонецФункции


&НаКлиенте
Процедура ОткрытьОтчет(Команда)
	
	ИмяОтчета = "ЗадолженностьКлиентов";
		
	ПараметрыОткрытия = ПолучитьПараметрыОткрытияОтчета(ИмяОтчета, ЭтотОбъект.Партнер);
	ОткрытьФорму("Отчет." + ИмяОтчета + ".ФормаОбъекта", ПараметрыОткрытия, ЭтотОбъект);
	
КонецПроцедуры

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

Так же появился дополнительный параметр ПараметрыОткрытия.Вставить("РежимПоНастройкамКомпоновки"), для которого нужно доработать логику в метод ПриОбновленииСоставаПользовательскихНастроекНаСервере типовой формы отчета (либо поправить код, либо через расширение).

 

&НаСервере
Процедура ПриОбновленииСоставаПользовательскихНастроекНаСервере(СтандартнаяОбработка)

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

КонецПроцедуры

 

 

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

См. также

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

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

10000 руб.

02.09.2020    152301    834    397    

845

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

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

15.05.2024    7266    implecs_team    6    

46

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

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

3 стартмани

05.02.2024    6484    50    obmailok    21    

79

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

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

1 стартмани

31.01.2024    2987    3    Yashazz    0    

34

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

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

2 стартмани

11.12.2023    10325    23    John_d    25    

124

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

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

05.12.2023    7301    PROSTO-1C    14    

67
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. VmvLer 13.11.18 10:55 Сейчас в теме
по-моему, в СП и любой типовой в общем модуле по СКД примеров гораздо больше.

хотя спасибо за то, что скопировали пару строк кода из первой попавшейся формы или модуля.
crosby; wowik; qwinter; chebser; A_Max; rpgshnik; +6 7 Ответить
2. zqzq 25 13.11.18 13:52 Сейчас в теме
(1) Вы не поверите... Нету там ничего. В своё время решал похожую задачу, отладчик замучал (но решил).

Автору плюс.
yaroslav.artem; ong1990; Demetry2000; DimaKors; dimaster; voneska7; Lacoste4life; link_l; user717534; zif74; Рамзес; SwarmWitcher; user712426; Samson-lim; user1520693; Mechanik21; neo-ti; atdonya; orfos; arancar; Созинов; user811769; Светлый ум; svilsa; bulpi; CyberCerber; Unk92; +27 Ответить
7. Unk92 280 14.11.18 11:16 Сейчас в теме
(1) А вы загляните и скиньте примеры методов, которые делают тоже самое..
10. VmvLer 14.11.18 11:28 Сейчас в теме
(7) откройте общий модуль ОбщегоНазначенияКлиентСервер изучайте примеры, а если проискать по общим модулям "Отбор", то можно еще найти примеры.


А в примерах автора топика я не увидел, что есть хоть намек на иерархии, а в настойках иерархия сплошь и рядом.
13. Unk92 280 15.11.18 08:33 Сейчас в теме
(10)
я не увидел, что есть хоть намек на иерархии

Я так полагаю, что речь идет о группах отборов "И", "Или", "Не".
Если так, то я учел ваш комментарий и дописал статью.
voneska7; +1 Ответить
3. oleg-x 22 13.11.18 14:28 Сейчас в теме
Как раз сегодня решил такую задачку, только там сделал не через пользовательские настройки,а просто через настройки.
Во всех примерах добавления не было одной строки:
ЭлементОтбора.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор();
И из-за неё потерял кучу времени, так как без этого не будут работать отборы.
Mizhgan42; Merkalov; Рамзес; user712426; atdonya; AgentNiCho; +6 Ответить
4. qwinter 683 13.11.18 14:52 Сейчас в теме
Опять ИТС и БСП перепечатывают.

(3) https://its.1c.ru/db/bsp246doc#content:415:hdoc
DFinteX; wowik; plevakin; +3 1 Ответить
8. Unk92 280 14.11.18 11:19 Сейчас в теме
(4)Я не претендовал на то, что это статья уникальна в своем роде. На ИТС по вашей ссылке описан один из методов БСП, если хотите, то в данной статье просто показано, как это работает внутри.

П.С. Если не интересно, то можно всегда пройти мимо =)
buy_sale; Рамзес; ybatiaev; newsleon; zif74; atdonya; orfos; +7 Ответить
31. native-api 27.04.24 11:41 Сейчас в теме
(8) Если ваш код копирует функции БСП (или, если хотите, БСП копирует ваш код), на это следует указать. Предлагая дефектные решения, вы оказываете своим читателям медвежью услугу.
19. AgentNiCho 23.10.19 16:49 Сейчас в теме
(3)
ЭлементОтбора.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор();


Спасибо большое за подсказку - тоже потерял кучу времени на этом.
5. monkbest 114 14.11.18 09:10 Сейчас в теме
Это про какую конфу, вид клиента? Где этот код расположен? в форме / в модуле, сервер / клиент, обычное приложение / управляемое? Конфа с БСП / без БСП?

где можно применить эти советы?
user1549775; Риник; Mos; ixijixi; +4 Ответить
6. ixijixi 1904 14.11.18 11:05 Сейчас в теме
9. Unk92 280 14.11.18 11:28 Сейчас в теме
(5) В самом начале есть пример кода, который открывает отчет СКД с параметрами.

Все чего там не хватает это

Отчет = Отчеты.муОтчет.СоздатьОбъект();
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;

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

Вернемся к вашим вопросам.
1. "Это про какую конфу". Это про любую конфу, т.к. речь идет о механизмах платформы 1с 8.3
2. "Вид клиента". Естественно, что объект вы создаете на сервере, а открываете отчет на клиенте (у данной статьи нет цели рассказывать про клиент серверную архитектуру)
3. "Где этот код расположен". В месте, где вам нужно открыть отчет =)
4. "обычное приложение / управляемое?". Управляемое приложение
5. "Конфа с БСП / без БСП". Без разницы, это не функционал БСП.

П.С. По-моему часть ваших вопросов только ради вопросов...
native-api; G_116449793522595596167; Raskad; Belayaya; marku; +5 Ответить
12. monkbest 114 14.11.18 14:11 Сейчас в теме
(9)
П.С. По-моему часть ваших вопросов только ради вопросов...

неее, просто мне задача такая часто попадается, и поэтому очень интересно, т.к. каждый раз как в первый раз трачу кучу времени в отладчике, чтобы понять, куда программно вставить значение, чтобы все красиво было. С nой попытки я нахожу куда сунуть настройки, чтобы работало, а с nХ2 - чтобы и отображалось корректно. И везде все решается по разному.

Например сейчас я ковыряюсь в старушке УПП, в которой кучка отчетов на СКД. И надо открывать эти отчеты с уже установленными настройками. Это обычные формы и там пользовательские настройки храняться и отображаются совсем другими механизмами, там для каждого варианта есть элемент справочника, где в хранилище значений лежат настройки и не только СКДшные. Там пользовательские настройки реализованы отдельно от того, что есть в платформе.

Ранее еб***ся с УТ 11.4. Там вроде СКД и УФ, но не совсем, т.к. есть БСП и общая формаОтчета с кучей кода в своем модуле и мне было очень грустно его читать, чтобы открыть отчет в котором на форме все красиво.

Из Вашего ответа я понял, что в УТ 11 я смогу протестить этот код и если все получиться "намотать на ус"
AgentNiCho; +1 Ответить
15. Unk92 280 15.11.18 09:09 Сейчас в теме
(12) Посмотрел код типовой УТ 11, должно все сработать, если делать по аналогии с тем. что написано в статье. Т.е. передавать пользовательские настройки через параметры открытия формы.
П.С. Сам в УТ 11 не пробовал =)
25. Unk92 280 14.08.20 10:29 Сейчас в теме
(12) Все-таки есть проблема с работоспособностью подхода в отчетах, где используется форма отчета из БСП. В конце статьи добавил пример кода, который решает данную проблему.
20. strelec13 21 31.05.20 16:09 Сейчас в теме
(9)
3. "Где этот код расположен". В месте, где вам нужно открыть отчет =)


Есть два места. При создании на сервере и при открытии формы.
Ответили ради отписки.
21. Unk92 280 01.06.20 17:01 Сейчас в теме
(20) Здравствуйте, в статье рассматривается вариант заполнения параметров отчета перед его открытием из вне, например, вы хотите расшифровать показатель отчета, другим отчетом.

ПараметрыОткрытия = Новый Структура();
ПараметрыОткрытия.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыОткрытия.Вставить("Вариант", КомпоновщикНастроек.Настройки);
ПараметрыОткрытия.Вставить("ПользовательскиеНастройки", КомпоновщикНастроек.ПользовательскиеНастройки);
ОткрытьФорму("Отчет.муОтчет.Форма.ФормаОтчета", ПараметрыОткрытия, ЭтаФорма, Истина);


"Есть два места. При создании на сервере и при открытии формы." два этих места не подходят для решения данной задачи. Если вы хотите модифицировать пользовательские настройки на форме отчета, то это нужно делать в событии "ПередЗагрузкойПользовательскихНастроекНаСервере".
user633364_seleznev.ua; dim369; +2 Ответить
11. bulpi 217 14.11.18 13:55 Сейчас в теме
Ковырять типовые конфы, чтобы это найти- лучше сразу в дурдом. Автор молодец, вот только для меня поздно. Уже сам с большими мучениями это освоил.
unknown181538; Gang031; 1giga; shard; Unk92; +5 Ответить
14. VmvLer 15.11.18 08:50 Сейчас в теме
(11) Я, думаю у многих была такая ситуация, когда вы что-то велосипедили день-два, а потом произносили "твою ...", когда обнаружили требуемый функционал в модуле формы, объекта, менеджера.

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

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

Если вы не согласны со мной сейчас, то вам еще необходимо время и опыт на понимание того, что я прав.
16. Fruit83 28 21.11.18 12:50 Сейчас в теме
(14)
в которых миллионы строк кода, который очень часто лаконичен


Новичек хочет разобраться в теме и вы предлагаете ему миллионы строк лаконичного кода. Может лучше начать с простых примеров? Не?
taasha25; ybatiaev; Raskad; 1giga; Злобный Фей; Klainor; +6 Ответить
17. insurgut 208 22.03.19 06:48 Сейчас в теме
Куча материалов о программной работе с СКД и ни одного нормального материала, для решения тех или иных задач без программирования, только при помощи использования самой СКД.

Например, если отчет - у него несколько вложенных. На форме параметр - список складов. Пользователь если устанавливает отбор - то он во вложенных схемах отработать должен. Если снимает, то отчеты выводятся без отбора по складу. Если с заполненным параметром все вроде как работает, то стоит на форме снять галочку отбора по складу, как вложенные схемы выдают "Не заполнено значение параметра", и это при том, что в самом запросе вложенной схемы используется конструкция {ГДЕ ВложенныйЗапрос.Склад В (&СпиокСкладов)}
ybatiaev; +1 Ответить
18. Unk92 280 22.03.19 14:54 Сейчас в теме
(17) здравствуйте, использование СКД без программирования в таких задачах , на мой взгляд, только усложняет код, который тяжело сопровождать. В вашем случае нужно ставить конкретные вопросы на форуме, а не искать решения по поиску.
П.с. скорее всего ваша задача решается проще, чем то, как вы ее пытаетесь решить
22. Shurkec 13.08.20 13:18 Сейчас в теме
Куча кода в статьи и ни слова о том где это вызывать (что было неоднократно подмечено выше). Сказал "а" - так говори и "б". Тому кто хорошо в этом разбирается эта статья не нужна. Тому кто только начинает разбираться эта статья не особо поможет.
23. Unk92 280 13.08.20 14:38 Сейчас в теме
(22) В конце статьи добавил полный пример открытия отчета с пользовательским отбором по партнеру.
24. Shurkec 13.08.20 16:32 Сейчас в теме
(23) Спасибо за оперативность!
26. daa147 4 25.02.21 10:07 Сейчас в теме
27. sml 41 12.08.21 17:23 Сейчас в теме
плюсанул - хорошо "разжевано"
28. KazanKokos 11 25.10.21 18:44 Сейчас в теме
Нужно было скопировать один отбор во второй. (второй добавлен в отбор отчета но не включен в пользовательские настройки)
Оба отбора одинаковые. Называются по разному и принадлежат разным наборам данных.
Не хотелось возиться со связями.
Искал долго. Все найденное не работало. Либо занимало много места и снимало Стандартную обработку. В итоге из двух найденных в яндексе примеров склеил один:
Может кому пригодится

&НаСервере
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	                                                                                                                                  	
	ПолеОтбораПоКассе = Новый ПолеКомпоновкиДанных("Касса");
	ПолеОтбораПоОперативнойКассе = Новый ПолеКомпоновкиДанных("ОперативнаяКасса");
	СкопироватьОтборСКД(ПолеОтбораПоКассе, ПолеОтбораПоОперативнойКассе);

КонецПроцедуры 

&НаСервере
Процедура СкопироватьОтборСКД(Источник, Приемник)
	
	ОтборИсточник = Неопределено;
	НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();  
	Для Каждого Отбор Из НастройкиОтчета.Отбор.Элементы Цикл
		Если Отбор.ЛевоеЗначение = Источник Тогда
	    	ОтборИсточник =  Отбор;
	        Прервать;
	    КонецЕсли;
	КонецЦикла;
	Если ОтборИсточник <> Неопределено  Тогда
		Для Каждого Отбор Из НастройкиОтчета.Отбор.Элементы Цикл
			Если Отбор.ЛевоеЗначение = Приемник Тогда
		    	Отбор.ПравоеЗначение = ОтборИсточник.ПравоеЗначение;
				Отбор.Использование = ОтборИсточник.Использование;
		        Прервать;
		    КонецЕсли;
		КонецЦикла;
	КонецЕсли;                
	КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиОтчета); // Все дело оказалось в этой строке. без нее не работало :)
	
КонецПроцедуры
Показать
29. myvov 13.10.22 11:21 Сейчас в теме
нормальная статья. Автору плюсик.

тут проще рассказывается даже чем в обучающем курсе по данной теме.
30. SergeySol-82 21.11.23 18:00 Сейчас в теме
Здравствуйте!
Спасибо за статью!

Хотелось бы дополнить: чтобы не использовать параметр РежимПоНастройкамКомпоновки и не править типовой модуль формы отчета нужно просто в передаваемые параметры добавить еще КлючВарианта. В нем, как пример, можно указать имя основного варианта отчета:
ПараметрыОткрытия = Новый Структура(); 	
ПараметрыОткрытия.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыОткрытия.Вставить("Вариант", КомпоновщикНастроек.Настройки);
ПараметрыОткрытия.Вставить("ПользовательскиеНастройки", КомпоновщикНастроек.ПользовательскиеНастройки);
ПараметрыОткрытия.Вставить("КлючВарианта", "Основной");

Я тестировал на специфической отраслевой конфигурации, но думаю на типовых тоже заработает.
32. denvoru 30.07.24 23:00 Сейчас в теме
Этот код не работает
&НаСервереБезКонтекста
Процедура УстановитьЭлементПользовательскогоОтбораСКД(КомпоновщикНастроек, ВидСравнения, ИмяПоля, Значение)
	
	ПользовательскийОтбор = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(
		КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки);
	
	ЭлементОтбораПользовательский =  ПользовательскийОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	
	ЭлементОтбораПользовательский.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор();
	ЭлементОтбораПользовательский.ВидСравнения = ВидСравнения;
	ЭлементОтбораПользовательский.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля);
	ЭлементОтбораПользовательский.ПравоеЗначение = Значение;
	ЭлементОтбораПользовательский.Использование = Истина;

КонецПроцедуры
Показать
33. Unk92 280 31.07.24 01:25 Сейчас в теме
(32) А что конкретно не работает? Какая-то ошибка или может результат не такой как ожидалось (тогда какой именно?).
И в рамках какой конфигурации применяли данный код (важно используется ли там форма отчета из БСП или форма типовая)?
Оставьте свое сообщение