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

17.02.22

Разработка - Универсальные функции

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

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

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

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

Будь то конструктор или программное создание, берущее за основу запрос с "жёсткими" параметрами, наблюдается эффект появления в отборе, доступном пользователю как интерфейсная проекция компоновщика настроек, ветки "Параметры", где все эти параметры фигурируют как поля отбора. Темой заметки является принудительное отключение этого эффекта.

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

Разберём на примере запроса к справочнику "Контрагенты".

 
 Инициализируем СКД

Будем исходить из выключенного автозаполнения.

Обратимся к коллекциям СКД и увидим, что:

рСКД.Параметры // пуста
рСКД.НастройкиПоУмолчанию.Отбор.ДоступныеПоляОтбора.Элементы // пуста
рСКД.НастройкиПоУмолчанию.ПараметрыДанных.Элементы // пуста

Аналогично, ничего нет в сериализованной СКД и её настройках по умолчанию.

Но - в табличном поле отборов 1С предложит пользователю доступное "поле отбора" из папки "Параметры", с именем "Усл ИНН". И это надо убрать.

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

 
 Рассматриваем настройки

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

Вывод прост: чтобы убрать что-то ненужное, надо явным образом добавить это ненужное.

 
 Решение

 

Собственно, всё. Если я изобрёл велосипед и есть более простой способ - тухлые помидоры приветствуются.

СКД параметры данные отбор

См. также

SALE! %

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

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

12000 10000 руб.

02.09.2020    161371    893    399    

873

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

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

21.05.2024    21098    dimanich70    81    

145

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

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

2 стартмани

11.12.2023    10966    24    John_d    25    

124

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

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

28.08.2023    15113    YA_418728146    7    

169

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3674    57    progmaster    8    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Jimbo 10 18.02.22 08:12 Сейчас в теме
А в чем собственно вопрос ? Как писать СКД с нуля самому без конструкторов программно ?
Советую разобраться с Настройки, Фиксированные Настройки, Пользовательские настройки - мутная темка, а так же как в БСП выполняются стандартные отчеты без формы с ВариантамиОтчетов, там много процедурок то перед инициализацией того или этого, то после. Сначала будет полная каша. Но отладчик в зубы - точки останова и истина где-то рядом.
4. Yashazz 4794 18.02.22 09:51 Сейчас в теме
(1) Спасибо, товарищ) Вопрос в том, как убрать из отбора параметры, автоматически добавленные туда при инициализации компоновщика. Жаль, если мне не удалось это внятно изложить...
kser87; sapervodichka; +2 Ответить
8. RustIG 1749 18.02.22 10:04 Сейчас в теме
(1)
...наблюдается эффект появления в отборе, доступном пользователю как интерфейсная проекция компоновщика настроек, ветки "Параметры", где все эти параметры фигурируют как поля отбора. Темой заметки является принудительное отключение этого эффекта.

приходится читать внимательно и последовательно, как и любые статьи Якова, чтобы добраться до сердцевины мысли...во как загнул...
sapervodichka; Jimbo; +2 Ответить
2. Поручик 4693 18.02.22 09:14 Сейчас в теме
Как-то не задумывался над параметрами. Всё само делалось.
5. Yashazz 4794 18.02.22 09:52 Сейчас в теме
(2) Знаешь, меня много лет напрягало, что, когда быренько делаешь СКД и кидаешь на форму отбор её компоновщика, то там параметры отсвечивают. Ну вот дошли руки)
7. RustIG 1749 18.02.22 10:01 Сейчас в теме
(5) привет! похоже на рабочую задачу - когда для разных магазинов надо формировать отчеты по магазину, но не показывать параметры...
10. Yashazz 4794 18.02.22 10:12 Сейчас в теме
(7) Привет. Она и есть рабочая, дальше некуда. Когда параметры доступны в отборе, пользователь радостно ставит одно, потом, например в проверке заполнения, УстановитьЗначениеПараметра ставит другое, и получается полный атас.
11. RustIG 1749 18.02.22 10:25 Сейчас в теме
3. axelerleo 346 18.02.22 09:44 Сейчас в теме
чтобы убрать что-то ненужное, надо явным образом добавить это ненужное
Читать голосом кота Матроскина.
Да, неочевидный момент, но с учетом трудного детства СКД, не удивительный.

P.S.: Кстати, почему-то ник Yashazz читаю часто как "Я щазз" (типа "ага, сейчас!") :)
6. Yashazz 4794 18.02.22 09:53 Сейчас в теме
(3)
P.S.: Кстати, почему-то ник Yashazz читаю часто как "Я щазз" (типа "ага, сейчас!") :)

Ник родился отчасти как притяжательное yasha's, отчасти как обеспечение уникальности, т.к. просто Yasha уже бывало занято)
axelerleo; +1 Ответить
9. RustIG 1749 18.02.22 10:07 Сейчас в теме
(6) еще бы бесплатно выложить файл для тестов - https://infostart.ru/about/help/28158/1293827/ - хочется потестить мысль
12. RustIG 1749 18.02.22 12:05 Сейчас в теме
(0) Яков, а можно увидеть полный код отчета?
Я так понимаю, что изначально речь идет о программном создании отчета и программном управлении видимостью параметров?
Поскольку , если не проограммно, то через "параметры параметров" можно исключить параметры из видимых разделов пользователей (прикладываю скрин).
Прикрепленные файлы:
user602678_maxipunchik; +1 Ответить
13. RustIG 1749 18.02.22 12:08 Сейчас в теме
(0) Яков, вместо кода:
 
Для каждого элПараметр Из комп.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы Цикл // именно ЭТА коллекция
	рПараметр=рСКД.Параметры.Добавить();
	ЗаполнитьЗначенияСвойств(рПараметр, элПараметр);
	рПараметр.Имя=СокрЛП(Строка(элПараметр.Параметр)); // тут может быть подводный камень локализации и имён

	рПараметр.ВключатьВДоступныеПоля = Ложь; // ради чего, собственно, всё и делалось    

	// Заметим, что рПараметр.ОграничениеИспользования = Истина; в нашем случае не играет никакой роли;
	// в этом и разница между ним и включением в доступные - в закладках параметров пользователю может быть
    // как разрешено, так и запрещено, и это не связано с общей доступностью для механизма.
КонецЦикла;
Показать


может подойти такой код ? :

ПараметрыДанных = СхемаКомпоновкиДанных.Параметры;  //коллекция
	Для Каждого Параметр Из ПараметрыДанных Цикл
		Если Параметр.Имя = "ИНН" Тогда
			Параметр.ВключатьВДоступныеПоля = Ложь;	
	        КонецЕсли;   		
	КонецЦикла;


Показать
18. Yashazz 4794 18.02.22 17:08 Сейчас в теме
(13) Неа, потому что у тебя коллекция Параметры пустая будет, пока из хмл не десериализуешь, или диалог конструктор явно не дёрнешь.
В том и фигня, что при программном заполнении она пустая!
19. RustIG 1749 18.02.22 18:54 Сейчас в теме
(18) почему пустая? я пробую - тестирую - у меня в отладке коллекция с параметром "ИНН"...
поэтому я хотел увидеть полностью код и сам отчет (тестовый я так полагаю)
20. Yashazz 4794 19.02.22 19:41 Сейчас в теме
(19) Интересное кино. Ты как создавал СКД? Можешь код выложить?
14. bulpi 217 18.02.22 13:00 Сейчас в теме
Вот за эту мутную фигню я и не люблю СКД. Плюс поставил.
15. lvictor58 137 18.02.22 14:08 Сейчас в теме
А мне кажется, что для виртуальных таблиц регистров параметры даже очень нужная вещь.
И поддерживаю Поручика: было бы над чем париться!
17. Yashazz 4794 18.02.22 17:07 Сейчас в теме
(15) А кто говорил, что ненужная? Вы вчитайтесь, о чём я. Параметры в отборе - вещь НЕнужная и опасная, если есть ещё хотя бы программная их установка, или если параметры доступны юзеру и на закладке "Параметры" консоли настройки.
16. kser87 2473 18.02.22 15:52 Сейчас в теме
Не сразу понятно, что хотел убрать автор. Кажется, со скриншотами конструктора настроек СКД было бы понятнее.
22. Yashazz 4794 19.02.22 20:00 Сейчас в теме
(16) Конструктор совершенно ни при чём, речь о программном создании. И о манерах 1С в работе с разными коллекциями, явно или неявно их объявляя по своему усмотрению. Скриншот с эффектом, от которого надо избавиться, добавил.
21. Yashazz 4794 19.02.22 19:59 Сейчас в теме
(19) Прикрепил. Смотри, у меня СКД.Параметры.Количество() = 0. Может, я реально тупой и что-то важное забываю?

Платформа 8.3.20.1674
Прикрепленные файлы:
ПримерПараметровВОтборе.epf
24. RustIG 1749 21.02.22 14:27 Сейчас в теме
(21) спасибо за обработку.
Яков, тут сложилась ситуация, что не мне учить тебя - поскольку с СКД я почти не работаю.
Но разобраться мне хотелось, поэтому опишу в целом все то, что я нашел для понимания проблемы.
Скажем так, что ты прав, что "Параметры" схемы компоновки данных не инициализируются в явном виде при полностью программном создании СКД.

1) К примеру в книге Хрусталевой Е.Ю. (издание 2008г.) на стр. 276 описывается программная работа с СКД - программно описываются параметры - создается для этих целей процедура УстановитьНастройки(), далее на стр. 280 - описывается программное создание новой схемы компоновки через процедуру УстановитьСхему(); и отдельно программная работа с настройками (в том числе с параметрами) - через процедуру УстановитьНастройки().

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


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

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

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

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

В поисках смысла нашел полезным (но не достаточным для понимания) для себя следующие публикации:
Программная работа с настройками СКД
Создание отчетов с помощью СКД
Процедура ПриКомпоновкеРезультата
Прикрепленные файлы:
25. Yashazz 4794 21.02.22 14:40 Сейчас в теме
(24) Да. Всё так. Собственно, этот своеобразный фрагмент работы СКД действительно нигде внятно не освещён, а эффект имеет место быть. Мы же можем применить СКД вообще где угодно, на любой произвольной форме, чтобы дать пользователю удобный отбор. А вот давать ему в отборе параметры - дело явно лишнее)
Спасибо за ссылки.
23. SlavaKron 20.02.22 10:59 Сейчас в теме
чтобы убрать что-то ненужное, надо явным образом добавить это ненужное.
По-моему, всё логично: если мы хотим переопределить свойства автоматически создаваемых элементов, мы должны создать их "вручную" (явно в коде) дабы получить доступ к этим свойствам.
26. logarifm 1123 21.02.22 19:36 Сейчас в теме
(0) А что мешает на вкладке Параметры снять флаг "Включать в доступные поля"? (если речь не идет о полностью программной конструкции). Тогда требуется именно изменить тему САБЖа, не корректно озвучено.
27. Yashazz 4794 21.02.22 20:01 Сейчас в теме
(26) Речь именно о полностью программном создании, и это указано в тексте заметки.
28. logarifm 1123 21.02.22 20:30 Сейчас в теме
(27) Тема: Убираем параметры из отбора СКД. Требует доработки поскольку она актуальна только для случаев програмного создания СКД. Интерактивный проблем нет с этим.
29. taasha25 13 12.03.23 17:13 Сейчас в теме
Вместо "Вывести список" программно делаю компоновку данных с настройками, вывожу список документов в таблицу.
И мне параметры нужны, только их нужно убрать из Табличного документа при выводе.
как это сделать?
Оставьте свое сообщение